我正在尝试使用反向匹配来 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 '^[<>]'