Bash: Grep 정규 표현식이 작동하지 않습니다.

Bash: Grep 정규 표현식이 작동하지 않습니다.

다음과 같이 사용할 때 grep:

ps aux | grep 'processname' | awk '{print $2}'

PIDs프로세스가 processname반환됩니다. 이것을 사용할 때:

ps aux | grep '^processname' | awk '{print $2}'

명령줄이 로 시작하는 프로세스를 가져오려고 하는데 processname작동하지 않습니다.

실행 중인 프로세스 예시:

processname
other_processname

명령의 시작이기 PID때문에 첫 번째 옵션을 얻고 싶습니다 .processname

나는 또한 -E, -e, -w플래그를 사용해 보았고 모두 동일한 결과를 반환했습니다. 무엇이 잘못되었나요?

답변1

^필드가 아닌 줄의 시작을 표시합니다.

ps aux | grep ' processname'

더 가까워지겠지만 여전히 일부 오탐지가 발생할 수 있습니다.

다른 열의 너비는 고정되어 있으므로 다음을 사용할 수도 있습니다.

grep '^.\{65\}processname'

여기서는 ^.\{65\}줄 시작 부분부터 정확히 65자입니다. 정확한 숫자는 시스템에 따라 다를 수 있습니다.

이미 awk를 사용하고 있으므로 이것이 더 나은 옵션일 수 있습니다.

ps aux | awk '{ if ($11 == "processname") print $2 }'

더 쉽게 파악하기 위해 ps의 출력 형식을 다시 지정할 수도 있습니다.

ps ax -o pid,args | grep '^[^ ]\+ processname'

스위치는 -o pid,argsps가 PID와 인수가 있는 명령만 표시하도록 합니다. 이 표현식은 ^[^ ]\+줄 시작 부분부터 첫 번째 공백까지의 모든 문자와 일치합니다.

관련 정보