Grep与上下文相反


1

我试图用反转匹配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

谢谢你的帮助。

Answers:


3

尝试使用GNU sed:

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

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

输出:

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff

0

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 '^[<>]'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.