grep 출력을 억제하여 종료 상태 만 반환하려면 어떻게해야합니까?


57

나는이 grep명령을 사용합니다. 파일에서 키워드를 검색하고 있지만 일치 항목을 표시하고 싶지 않습니다. 의 종료 상태를 알고 싶습니다 grep.

답변:


69

모든 의 POSIX 호환 버전은grep 스위치가 -q조용한를 들어 :

-q
     Quiet. Nothing shall be written to the standard output, regardless
     of matching lines. Exit with zero status if an input line is selected.

GNU grep (및 기타)에서는 긴 옵션 동의어도 사용할 수 있습니다.

-q, --quiet, --silent     suppress all normal output

문자열이 존재합니다 :

$ echo "here" | grep -q "here"
$ echo $?
0

문자열이 존재하지 않습니다 :

$ echo "here" | grep -q "not here"
$ echo $?
1

6

출력을 다음 grep으로 리디렉션하십시오 /dev/null.

grep sample test.txt > /dev/null

echo $?

1
이것은 실패 할 echo $?경우 grep반환 0이 아닌 종료 코드입니다.
WinnieNicklaus

2

grep -q <pattern>마지막 프로세스를 종료하려면 즉시 종료 코드를 즉시 확인 해야합니다 ( $?).

이를 사용하여 다음과 같은 명령을 작성할 수 있습니다.

uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac

다음 STDERR과 같이 출력을 선택적으로 억제 할 수 있습니다 .

grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac

이것은 (우리가 읽을 권한이 없거나 파일이 존재하지 않는다고 가정 할 때) 명령문 error: 2에서 인쇄 되지만, 오류 메시지는 리디렉션 되지 않으므로 리디렉션 되지 않습니다.case/etc/shadowgrep/dev/null

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.