これを行うより簡単な方法はありますか?
grep -v foo file | grep -v bar
egrepを使う非常にエレガントな方法があるかもしれませんが、通常のold grepを使うのはどうですか?
編集:grep -v 'foo\|bar' file
GNU 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
基本機能が得られます。grep
PATH
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 standards
Solarisシステムも参照してください。