Grep 反向匹配上下文

Grep 反向匹配上下文

我正在尝试使用反向匹配来 grep 一个文件,但也无法匹配匹配行之后的每一行。

因此我在一个名为的文件中拥有以下内容testing_grep

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
dddddddddddddddddd
llllllllllllllllll
dddddddddddddddddd
llllllllllllllllll
fffffffffffffffff
fffffffffffffffff

所以我想匹配除包含该匹配的行d和下一行之外的所有行,因此我有以下grep命令:

 grep -v "d" -A 1 testing_grep.txt 

但是,我仍然得到所有行的输出,而我需要的只是以下输出:

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff

谢谢你的帮助。

答案1

使用 GNU sed 尝试一下:

在模式空间(当前行)中搜索(//)包含的行d。仅针对这些行将下一行输入附加到模式空间(N)并删除模式空间(d)。

sed '/d/{N;d;}' testing_grep.txt

输出:

啊啊啊啊啊啊啊啊啊啊啊啊
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
ffffffffffffffffff
ffffffffffffffffff

答案2

Cyrus 已经为你提供了完美的答案,但如果你想用 grep 来做(这更复杂)

你可以用 grep 找出你不想要的行,然后把它们放在一个文件中:

grep 'd' -A 1 testing_grep.txt > otherfile.txt

otherfile.txt 内容将是: dddddddddddddddddd llllllllllllllllll dddddddddddddddddd llllllllllllllllll

然后使用 diff 命令获取差异:

diff testing_grep.txt otherfile.txt | grep '^[<>]'

相关内容