首页 > 解决方案 > 使用 Sed 使用带有模式的文件删除多行

问题描述

我目前正在使用 sed 使用以下代码从文件中删除具有各种模式的行和后续行:

sed -i -e"/String1/,+1d" -e"/String2/,+1d," filename.txt

效果很好,但是我有很多不时变化的模式。

是否可以将所有模式放在另一个文本文件中并使 sed 删除在该文件中找到的模式的所有条目?

谢谢

标签: sedraspberry-pi

解决方案


这是一个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如果找到触发线,将标志设置f2
  • --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

推荐阅读