複数のパラメータでgrep -vを使用する

複数のパラメータでgrep -vを使用する

これを行うより簡単な方法はありますか? grep -v foo file | grep -v bar

egrepを使う非常にエレガントな方法があるかもしれませんが、通常のold grepを使うのはどうですか?

編集:grep -v 'foo\|bar' fileGNU grepでのみ動作するようです。私はSolarisを使用しています。解決策はありますか?

答え1

一般的に見られるように、オプションではなく最初の引数の代わりに各式に引数を渡すことで、単一のコマンドgrepで複数のテストを実行できます。-e

$ grep -v -e foo -e bar file

これは、コマンドが実行するのと同じ操作を示しています。つまり、file「foo」や「bar」を含まない行を印刷します。

-vこれを削除すると、論理演算も変更されることに注意してください。 "foo"を含むすべての行を取得します。または「バー」。

答え2

grep -Ev 'word1|word2'うまくいくはずです

答え3

パラメータ拡張には中括弧を使用することもできます。

grep -v -e{foo,bar}

これは、以下と事実上同じです。

grep -v -e foo -e bar

(このコメントには評判ポイントが足りません。)

答え4

Solaris 11.4でPATHデフォルト設定よりも少し便利なコマンドラインツールを選択するように変数を正しく設定すると、次のことができます。

grep -E -v 'foo|bar' file

このように設定すると、より強力なgrep基本機能が得られます。grepPATH

PATH=$(/usr/xpg6/bin/getconf PATH):$PATH

PATHデフォルトの Solaris 11.4 システムでは、既存の変数値の前に次のパスが追加されます。

/usr/xpg6/bin:/usr/xpg4/bin:/usr/bin:/opt/developerstudio12.5/bin:/opt/solarisstudio12.4/bin

man standardsSolarisシステムも参照してください。

関連情報