web-dev-qa-db-ja.com

grep -v "grep"とはどういう意味ですか。

何だろうと思っていたgrep -v "grep"はどういう意味ですか?

22
Joe

grep -v "grep"は1行ずつ入力を受け取り、grepが出現しない行のみを出力します。 -vがない場合、grepdoesが出現する行のみが出力されます。詳細は man grep を参照してください。

grepユーティリティ自体に関する限り、引数として渡されるパターンgrepがその名前と同じであることは重要ではありません。しかし、実際にgrep -v grepが現れるほとんどの場合、これは偶然ではありません。

grep -v grep(またはgrep -v 'grep'またはgrep -v "grep")はしばしば パイプ の右側に表示され、その左側が ps コマンド。 それはあなたがそれを見たところです。たとえば、名前、パス、またはコマンドライン引数がXfceに関連していることを示唆している実行中のプログラムを探している可能性があります。

ek@Io:~$ ps x | grep xfce
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
31901 pts/1    S+     0:00 grep --color=auto xfce

私のgrepコマンドは出力に表示されましたが、私が探しているものではありません。実行中のものだけを調べているときに、すでに実行中だったプロセスに関する情報を探しています。実行中のものを調べるための私の努力の理由です。

この煩わしさを解消する一般的な方法の1つは、grep -v grepanotherパイプを追加することです。

ek@Io:~$ ps x | grep xfce | grep -v grep
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd

grepなしで-Fを使用すると、パターンが 固定文字列 ではなく 正規表現 として扱われます。したがって、もう1つのアプローチは、xfceと完全に一致する正規表現を記述することですが、書き方は異なります。例えば:

ek@Io:~$ ps x | grep '[x]fce'
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd

これは、[x]が文字xと完全に一致する 文字クラス であるため機能します。


これらの一般的なメソッドの欠点の1つは、自分が実行したばかりのgrepコマンドではない場合でも、grepを含む行を除外することです。それらはgrepコマンドでなくてもよく、名前、パス、またはコマンドライン引数containgrepのコマンドのみです。したがって、 Sergiy Kolodyazhnyyが指摘したように のように、多くの場合、これらの方法(およびpsの出力のパイプ処理を含む他の方法)のどちらも実際には理想的ではなく、 Nic Hartley言及その他ウェイズ よく使用される pgrep 。例えば:

ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
  • -ashowsコマンドライン全体。省略して、プロセスID番号のみを表示します。
  • -fsearchesコマンドライン全体。名前のみを検索する場合は省略します。
70
Eliah Kagan

grep --helpは、-vフラグの機能を示しています。

-v, --invert-match        select non-matching lines

-vフラグを使用して、一致を反転して印刷できます。つまり、指定されたWordを含まない行のみに一致します。たとえば、Wordバーを含まないすべての行を印刷します。

$ grep -v bar /path/to/file

続きを読む...

8
Karlom