从文件中删除模式ABC不包含模式MNO的行

时间:2016-07-07 09:45:33

标签: shell text-manipulation

$ cat File1
MNO ABC
MNO ABC
ABC
vzcbjzcb

删除行后,它应如下所示:

MNO ABC 
MNO ABC
zcvshskl  

1 个答案:

答案 0 :(得分:0)

我会选择 Perl ,如下所示:

perl -nle 's/ABC//g if !m/MNO/; print if length($_)' File1

那说...... “自动处理File1处理行结尾的所有行(-nle)。如果行没有,则替换(替换)ABC匹配MNO。如果该行不为空,请打印该行。“

请注意,这不会在输入文件中保留空行,但我相信这不是问题。

你可以用 awk

做同样的事情
awk '!/MNO/{gsub(/ABC/,"")} length($0)' File1

sed

sed -e '/MNO/!s/ABC//g' -e '/^\s*$/d' File1

如果你真的,真的想用 bash

来做
#!/bin/bash
while read line; do
   [[ ! $line =~ MNO ]] && line=${line/ABC/}
   [ ${#line} -gt 0 ] && echo $line
done < File1