
我正在嘗試使用反向匹配來 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 '^[<>]'