2012-01-23 9 views
4

の背後にある負の表情:psの結果は、それらが含まれているため、マックOSX、バッシュ、awkは、と私はawkを使用して、特定のプロセスを検索したい

ps aux|awk '/plugin-container.*Flash.*/' 

今では、プロセスを見つけ、それが結果に自分自身を含んでいます同じように。これを防ぐために、私は以下のように否定的な表情を使用しようとしています:

ps aux|awk '/(\?<!awk).*plugin-container.*Flash.*/' 

しかし、それは動作しません。 awkのサポートは後ろに見えますか?私は間違って何をしていますか?開口部ブラケットは記号である右後awkがlookbehindsをサポートしている場合のおかげ

+1

パイプ( '|')で 'grep -v awk'と再パイプするのはなぜですか? –

+0

参照http://stackoverflow.com/a/8965530/207248 – SiegeX

+0

2人の回答者は知らないと言っていますawkがlookbehindをサポートしているかどうかそれはしません。 OS X(とGNU) 'grep'には、ルックビハインド(そして前方など)を提供するPCREをサポートする' -P'オプションがあります。 –

答えて

7

を一般的なやり方は、使用することです

文字クラス[p]は、grep自体が一致する。

+1

同じトリックはawkで動作します: 'ps aux | awk '/[p]lugin-container.*Flash。* /' ' –

+0

これはawkの場合でもうまくいきます。どのように動作するのか教えていただけますか?ありがとう – Loke

+0

@Loke:最後の行で説明しようとしました。 '[p]'は文字 'p'だけが一致する文字クラスを作成するので、' plugin'は一致しますが、 '[p] lugin'は一致しません。言い換えれば、検索する文字列を含まないようにコマンドラインを変更します。 – choroba

0

は私は知りませんが、、その後、先頭に疑問符をエスケープすべきでない場合は、負の後読みは(?<!

疑問符を開始しますこのグループは捕獲グループではない、すなわちそれはいくつかの特別な意味を有する。

2

私はawkは後読みをサポートしているかどうか知らないが、私は通常grep -vでこの問題を解決:

[email protected]:~$ ps aux | awk '/plugin-container.*Flash/' | grep -v awk 

(また、私は通常、上記awkコマンドのgrepを使用すると思います。)

+0

'awkはlookaroundパターンをサポートしていません。 – wajatimur

関連する問題