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 試試這個:

在模式空間(目前行)中搜尋 ( //) 包含 g 的行d。僅對於這些行,將下一行輸入追加到模式空間 ( N) 並刪除模式空間 ( d)。

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

輸出:

啊啊啊啊啊啊
bbbbbbbbbbbbbbbbbb BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
bbbbbbbbbbbbbbbbbb BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
cccccccccccccccccccc
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

答案2

賽勒斯已經給了你完美的答案,但如果你想用 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 '^[<>]'

相關內容