我想删除文件中包含 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
对于其他sed
s,您必须循环遍历文件列表
for file in ./*.txt
do
sed '$!N;/PATTERN/!P;D' "$file"
done
这将始终在模式空间中保留两行,并在模式空间不匹配时打印第一行,因此输入如下
some line
PATTERN
PATTERN
more
lines
another line
PATTERN
它会打印
more
lines