これを行う簡単な方法はありますか? grep -v foo file | grep -v bar
egrepを使用してそれを行うにはおそらく非常にエレガントな方法がありますが、単純な古いgrepを使用する方法はありますか?
編集: grep -v "foo\|bar" file
はGNUgrepでのみ機能するようです。私はSolarisを使用しています。そのための解決策はありますか?
コメント
回答
複数のテストを通常表示される最初の非オプション引数としてではなく、-e
引数を使用して各式を渡すことにより、単一のgrep
コマンドを実行します。
$ grep -v -e foo -e bar file
これは、コマンドと同じことを意味します。「foo」も「bar」も含まないfile
からの行を出力します。 。
-v
を削除すると、これが完全に逆になることに注意してください。論理演算も変わります! 「foo」または「bar」を含むすべての行を取得します。
回答
grep -Ev "word1|word2"
は問題なく動作するはずです
コメント
- 代わりに、egrepを使用してバックスラッシュを削除することもできます。パイプ文字:
egrep -v 'word1|word2
- これは、Solarisgrepでは機能しないことが判明しました。 GNU grepをインストールして、完全に機能しました。 '質問を編集してSolaris固有にするつもりです。
- @rahmu
\|
はGNUgrepです。拡張機能ですが、-E
と|
演算子を使用してポータブルな方法で同じことを実現できます。
-v
フラグは否定です。not(A or B) == not(A) and not(B)