grep 명령에서 여러 패턴의 단일 인스턴스 반환

grep 명령에서 여러 패턴의 단일 인스턴스 반환

수백 줄의 출력을 반환하는 명령이 있는데 ps -ef거의 동일한 패턴(끝에 있는 숫자 제외)을 grep하고 각 패턴의 단일 인스턴스를 반환해야 합니다. 예:

이 특정 ps -ef명령은 수십 개의 줄을 출력하며, 각 줄에는 무작위로 할당된 문자열 svc-0이나 svc-50에서 5 사이의 숫자가 포함되어 있습니다 svc. 이렇게 하면 grep -Eo 'svc-[0-5]'패턴 일치를 수행하고 모든 행의 모든 ​​인스턴스를 반환합니다. svc-0and 의 존재 만 확인하면 됩니다 svc-5. 내가 원하는 출력은 다음과 같습니다.

svc-0
svc-5

다음과 같이 행이 연속해서 여러 번 반복되는 경우가 많기 -m2때문에 grep에 추가 할 수 없습니다 .svc

svc-5
svc-5
svc-5
svc-5
svc-5
svc-0
svc-0
svc-0
svc-0
svc-0

답변1

awk 필터를 사용하여 원하는 두 패턴을 찾을 수 있습니다. 둘 다 발견되면 성공적으로 종료하고, 그렇지 않으면 "실패"로 종료합니다.

ps -ef ... | awk '/svc-0/ { zero++; } /svc-5/ { five++; } END { if (zero && five) exit 0; exit 1; }'

관련 정보