刪除包含模式的行以及[重複]之前的行

刪除包含模式的行以及[重複]之前的行

我想刪除文件中包含 pattern 的兩行aaa bbb ccc

我使用了以下表達式,它刪除了包含模式的行aaa bbb ccc和之前的行。

$ sed -n '/aaa bbb ccc/{s/.*//;x;d;};x;p;${x;p;}' file.txt | sed '/^$/d'

這適用於一個文件。它不適用於多個文件

$ for i in *.txt; do sed -n '/aaa bbb ccc/{s/.*//;x;d;};x;p;${x;p;}' "$i" | sed '/^$/d'; done

範例檔:

xxx
yyy
aaa bbb ccc
eee
fff
aaa bbb ccc
ggg
hhh

結果文件:

xxx
eee
ggg
hhh

答案1

看起來你正在使用gnu sed- 在這種情況下你可以做類似的事情

sed -s 'N;/PATTERN/!P;D' ./*.txt

對於其他seds,您必須循環遍歷文件列表

for file in ./*.txt
do
sed '$!N;/PATTERN/!P;D' "$file"
done

這將始終在模式空間中保留兩行,並在模式空間不匹配時列印第一行,因此輸入如下

some line
PATTERN
PATTERN
more
lines
another line
PATTERN

它會列印

more
lines

相關內容