패턴에서 부정을 사용하여 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

우리는 grep두 가지 모드를 입력합니다. 하나는 줄의 끝이고 $다른 하나는 공백이며 다음 내용입니다 [[:blank:]].*$.

답변3

PHP 스크립트의 첫 번째 매개변수는 다음과 같아야 합니다 scan_document. 5

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

관련 정보