我有一個文件,下面幾行:grep命令在一個行的字符串,如果以前的行不包含特定字符串
abcdef ghi jkl
uvw xyz
我希望到grep字符串「XYZ」如果前面的行不包含字符串「jkl」。
我知道如果grep的字符串不包含使用-v選項的特定字符串。但我不知道如何用不同的線條做到這一點。
我有一個文件,下面幾行:grep命令在一個行的字符串,如果以前的行不包含特定字符串
abcdef ghi jkl
uvw xyz
我希望到grep字符串「XYZ」如果前面的行不包含字符串「jkl」。
我知道如果grep的字符串不包含使用-v選項的特定字符串。但我不知道如何用不同的線條做到這一點。
grep
真的是一個面向行的工具。這也許可以達到你想要做什麼用,但它更容易用AWK:
awk '
/xyz/ && !skip { print }
{ skip = /jkl/ }
' file
讀爲:每行,做
xyz
我們避風港」 t剛剛看過jkl
,打印出來;skip
以指示我們是否剛剛看過jkl
。我認爲你最好使用實際的編程語言,即使是像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
感謝您的回答。這perl一班輪是好的。 –
sed '/jkl/{N;d}; /xyz/!d'
jkl
,刪除線和未來xyz
謝謝你的答案。 –
謝謝。我需要在awk中探索很多: -/ –