sed - 使用 Sed 使用带有模式的文件删除多行
问题描述
我目前正在使用 sed 使用以下代码从文件中删除具有各种模式的行和后续行:
sed -i -e"/String1/,+1d" -e"/String2/,+1d," filename.txt
效果很好,但是我有很多不时变化的模式。
是否可以将所有模式放在另一个文本文件中并使 sed 删除在该文件中找到的模式的所有条目?
谢谢
解决方案
这是一个awk
版本
awk 'NR==FNR {a[$0]++;next} {for (i in a) if ($0~i) f=2} --f<0' list yourfile
NR==FNR {a[$0]++;next}
将要删除的行列表存储在数组中的文件列表中a
for (i in a)
对于每一行,遍历列表中的所有行if ($0~i) f=2
如果找到触发线,将标志设置f
为2
--f<0
将 flag 减一并f
测试它是否小于0
,如果是,则打印该行。
例子
cat yourfile
one
two
three
four
five
six
seven
eight
nine
ten
eleven
cat list
three
eight
awk 'NR==FNR {a[$0]++;next} {for (i in a) if ($0~i) f=2} --f<0' list yourfile
one
two
five
six
seven
ten
eleven