2つの単語のうち1つだけを含め、両方を含まない行を見つけるにはどうすればよいですか?

2つの単語のうち1つだけを含め、両方を含まない行を見つけるにはどうすればよいですか?

grepこれら2つの単語のうちの1つだけが行に表示され、同じ行にある場合は、表示されていない2つの単語のうちの1つを含む行のみを表示したいと思います。

これまで試しましたが、 grep pattern1 | grep pattern2 | ...期待した結果が得られませんでした。

ベストアンサー1

それ以外の道具はgrep行く道です。

たとえば、Perlを使用すると、コマンドは次のようになります。

perl -ne 'print if /pattern1/ xor /pattern2/'

perl -nestdin の各行に指定されたコマンドを実行します。この場合、一致する場合は行を印刷します。つまり、/pattern1/ xor /pattern2/あるパターンは一致しますが、他のパターンは一致しません(XOR)。

これはパターンの順序に関係なく動作し、grep複数の呼び出しよりもパフォーマンスが高く入力が少なくなります。

または、より短くawkを使用してください。

awk 'xor(/pattern1/,/pattern2/)'

または、以下のないawkバージョンの場合xor

awk '/pattern1/+/pattern2/==1`

おすすめ記事