[unix] ps 결과에 ‘grep’이 나타나지 않도록하려면 어떻게해야합니까?

존재하지 않는 프로세스를 검색하면

$ ps aux | grep fnord
wayne    15745  0.0  0.0  13580   928 pts/6    S+   03:58   0:00 grep fnord

분명히 나는 ​​grep에 관심이 없습니다. ps프로세스 를 검색하는 것만큼이나 의미가 있습니다!

grep이 결과에 나타나지 않게하려면 어떻게해야합니까?



답변

키 체인에 해결책이 있습니다.

$ ps aux | grep "[f]nord"

문자열 주위에 대괄호를 문자와 따옴표로 묶으면 정규 표현식을 검색합니다. “문자 ‘f’뒤에 ‘nord’가 있습니다.”

그러나 패턴 ‘f’뒤에 괄호를 넣은 뒤에 ‘]’ grep이 표시 되므로 결과 목록에 표시되지 않습니다. 니토!


답변

내가 사용하는 또 다른 옵션 (특히 프로세스가 실행 중인지 확인하는 것)이 pgrep
명령입니다. 일치하는 프로세스를 검색하지만 검색을위한 grep 행은 나열하지 않습니다. 나는 정규식이나 탈출을하지 않고 빠른 검색 방법이기 때문에 좋아합니다.

pgrep fnord


답변

이상적인 솔루션은 BriGuy가 제시 한 솔루션입니다

pgrep fnord

그러나 그렇게하고 싶지 않으면 grep 과 일치하는 모든 줄을 제외하면 됩니다.

ps aux | grep -v grep | grep "fnord"


답변

가장 우아한 해결책은 아니지만 다음과 같이 할 수 있습니다.

$ ps aux | grep fnord | grep -v grep


답변

zsh에서 grep fnord =(ps aux).

아이디어는 먼저 실행 ps aux하여 결과를 파일에 넣은 다음 grep해당 파일에서 사용 하는 것입니다. zsh의 “프로세스 대체”를 사용하므로 파일이 없습니다.

설명하기 위해 시도

ps aux > ps.txt
grep fnord ps.txt
rm ps.txt

결과는 같아야합니다.

다른 답변에 대한 일반적인 의견 . 일부는 복잡하고 타이핑하기까지 먼 곳입니다. 그것은 옳은 것의 문제 일뿐만 아니라 사용 가능해야합니다. 그러나 이것이 그 해결책 중 일부가 나쁘다는 것을 의미하지는 않습니다. 사용 가능하게하려면 미니 UI 안에 싸야합니다.


답변

ps aux | grep $(echo fnord | sed "s/^\(.\)/[\1]/g")


답변

이 답변은 GNU에만 해당 됩니다. 보다 일반적인 해결책 은 Wayne의 답변 을 참조하십시오 .

프로세스 검색

fnord프로세스를 찾고 있다면 -C옵션을 사용하여 명령 이름으로 선택할 수 있습니다 .

ps -C fnord

이것은 원하는대로 BSD 및 POSIX 스타일 형식 옵션과 혼합 될 수 있습니다. 전체 목록 은 ps 매뉴얼 페이지 를 참조하십시오 .

다른 것을 찾고 계십니까?

명령 이름을 정확하게 검색하는 것보다 고급 기능이 필요한 경우 희망을 잃지 마십시오! 이것은 여전히 ps파이프 측면에서 수행 할 수 있습니다 . 우리가해야 할 일은 결과에서 프로세스 ps를 제외 시키라 grep는 것입니다.

ps -NC grep | grep 'fnord'

-C grep모든 grep 프로세스를 선택 -N하고 선택을 무효화합니다. 명령 인수, 명령 이름의 일부 또는보다 복잡한 정규식을 검색하는 데 사용할 수 있습니다.