2013-06-21 33 views

回答

2

grep真的是一個面向行的工具。這也許可以達到你想要做什麼用,但它更容易用AWK:

awk ' 
    /xyz/ && !skip { print } 
       { skip = /jkl/ } 
' file 

讀爲:每行,做

  • 當前行匹配xyz我們避風港」 t剛剛看過jkl,打印出來;
  • 設置變量skip以指示我們是否剛剛看過jkl
+0

謝謝。我需要在awk中探索很多: -/ –

0

我認爲你最好使用實際的編程語言,即使是像Bash或AWK或sed這樣簡單的編程語言。例如,使用bash:

(
    previous_line_matched= 
    while IFS= read -r line ; do 
    if [[ ! "$previous_line_matched" && "$line" == *xyz* ]] ; then 
     echo "$line" 
    fi 
    if [[ "$line" == *jkl* ]] ; then 
     previous_line_matched=1 
    else 
     previous_line_matched= 
    fi 
    done < input_file 
) 

或者,更簡潔,使用Perl:

perl -ne 'print if m/xyz/ && ! $skip; $skip = m/jkl/' < input_file 
+0

感謝您的回答。這perl一班輪是好的。 –

1
sed '/jkl/{N;d}; /xyz/!d' 
  • 如果發現jkl,刪除線和未來
  • 打印僅存線,xyz
+0

謝謝你的答案。 –

相關問題