我在文件中有以下几行:
abcdef ghi jkl
uvw xyz
如果前一行不包含字符串“jkl”,我想grey寻找字符串“xyz”。
如果该行不包含使用-v选项的特定字符串,我知道如何grep一个字符串。但我不知道如何用不同的方式做到这一点。
答案 0 :(得分:2)
grep
实际上是一种面向行的工具。有可能用它来实现你想要的东西,但是使用Awk更容易:
awk '
/xyz/ && !skip { print }
{ skip = /jkl/ }
' file
读为:对于每一行,请执行
xyz
匹配且我们尚未看到jkl
,请将其打印出来; skip
以表明我们是否刚看到jkl
。答案 1 :(得分:1)
sed '/jkl/{N;d}; /xyz/!d'
jkl
,请删除该行,然后删除xyz
答案 2 :(得分: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