[英]grep for a string in a line if the previous line doesn't contain a specific string
我在文件中有以下行:
abcdef ghi jkl
uvw xyz
如果上一行不包含字符串“jkl”,我想grep字符串“xyz”。
我知道如果使用-v选项的行不包含特定字符串,如何grep一个字符串。 但我不知道如何用不同的线条做到这一点。
grep
实际上是一个面向行的工具。 有可能用它来实现你想要的东西,但是使用Awk更容易:
awk '
/xyz/ && !skip { print }
{ skip = /jkl/ }
' file
读作:对于每一行,做
xyz
匹配并且我们还没有看到jkl
,则打印它; skip
以指示我们是否刚刚看到jkl
。 sed '/jkl/{N;d}; /xyz/!d'
jkl
,则删除该行,然后删除 xyz
打印剩余的行 我认为你最好使用一种实际的编程语言,即使是像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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.