sed和删除匹配“String1 AND string 2”的行

时间:2015-10-09 10:09:09

标签: bash sed scripting

我找不到如何制作,我想删除包含ACE和REE的每一行。只有两个单词都存在。

sed -i '/ACE/d' $1

3 个答案:

答案 0 :(得分:2)

我建议使用awk,它允许你分别指定两种模式:

awk '!(/ACE/ && /REE/)' file

除了两种图案都匹配的线条外,所有线条都被打印出来。

这种方法的优点在于,无论两个字符串出现的顺序如何,它都能正常工作。

实现"就地"编辑,你可以采用标准方法:

awk '!(/ACE/ && /REE/)' file > tmp && mv tmp file

即。输出到临时文件,然后覆盖源。

答案 1 :(得分:1)

试试这个方法

sed -i '/ACE.*RRE/d' FileName

或者

sed -i '/\(ACE\|CH3\).*\(CH3\|ACE\)/d' FileName

示例:

cat sample

<强>输出:

336 ACE CH3 1.00
123 ACE 321 test
This ACE for testing CH3

<强>命令:

sed  '/ACE.*CH3/d' sample

<强>输出:

123 ACE 321 test

答案 2 :(得分:1)

如果您需要匹配这两个单词,但您不知道顺序,则需要尝试这两种情况:

sed -i '/\(ABC.*DEF\)\|\(DEF.*ABC\)/d' FileName

它会匹配 ABC.*DEFDEF.*ABC的所有行,然后将其删除。

注意:使用类似于以下的模式,您还将匹配ABC出现2次和DEF 0次的情况,这是您想要的情况。

sed -i '/\(ABC\|DEF\).*\(ABC\|DEF\)/d' FileName