パターンで否定を使用してgrep

パターンで否定を使用してgrep

grepパターンの否定的な部分を一致させるために(または他のツール)をどのように使用できますか?

はい

php cronjob.php test
php cronjob.php scan_document
php cronjob.php scan_document -v
php cronjob.php scan_documenttest -v
php cronjob.php scan_document_callback_retry

上記のシナリオでは、行2と行3を一致させる必要があります。

php cronjob.php scan_document
php cronjob.php scan_document -v

私はこのコマンドを使用します

ps --noheader -o pid,ppid,cmd -C php | grep "cronjob.php scan_document"

しかし、私が望むものよりも優れていると思います。

php cronjob.php scan_document
php cronjob.php scan_document -v
php cronjob.php scan_document_callback_retry

答え1

次のような場合をすべて一致させたいと思います。単語の境界 \b後ろにscan_document:

$ grep 'cronjob\.php scan_document\b' << EOF
php cronjob.php test
php cronjob.php scan_document
php cronjob.php scan_document -v
php cronjob.php scan_documenttest -v
php cronjob.php scan_document_callback_retry
EOF
php cronjob.php scan_document
php cronjob.php scan_document -v

ピリオドをエスケープしました。cronjob.phpそれ以外の場合は、単一の文字と一致する可能性があります。

答え2

あなたgrepはその仕事をしており、あなたのパターンは文字列がどのように終わるかについて何も言いません。その後、追加する必要があります。

$ grep "cronjob\.php scan_document$\|cronjob\.php scan_document[[:blank:]].*$" file
php cronjob.php scan_document
php cronjob.php scan_document -v

私たちはgrep2つのモードを入力します。 1つは行の終わり、$もう1つは空白、次の内容です[[:blank:]].*$

答え3

PHPスクリプトの最初のパラメータは次のようになりますscan_document。 5

$ awk '$3 == "scan_document"' file
php cronjob.php scan_document
php cronjob.php scan_document -v

関連情報