使用 sed 提取包含 PAT1 但不包含 PAT2 的行

使用 sed 提取包含 PAT1 但不包含 PAT2 的行

我想从文件中提取包含 PAT1 但不包含 PAT2 的行。例如,PAT1='dog'、PAT2='cat' 以及以下输入:

1 cat chicken
2 bird dog apple
3 dog orange cat
4 cat juice coffee
5 cow milk dog

我想要以下输出:

2 bird dog apple
5 cow milk dog

答案1

就像是:

sed '/dog/!d;/cat/d'

也可以看看

grep dog | grep -v cat

答案2

你可以这样做:

sed -n '
    /dog/{
        /cat/!{
            p
        }
    }
' file.txt

或与:

awk '/dog/ && !/cat/' file.txt

后者的优点是非常清晰且易于记忆。

或使用

perl -ne 'print if /dog/ && !/cat/' file.txt

相关内容