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

関連情報