grep 결과를 기반으로 에코

grep 결과를 기반으로 에코

grep이 결과를 찾았는지 여부에 따라 '예' 또는 '아니요'를 표시하는 하나의 라이너가 필요합니다.

나는 을(를) 가지고 플레이했지만 grep -c성공하지 못했습니다.

답변1

어떻습니까:

uptime | grep user && echo 'yes' || echo 'no'
uptime | grep foo && echo 'yes' || echo 'no'

그런 다음 조용히 할 수 있습니다.

uptime | grep --quiet user && echo 'yes' || echo 'no'
uptime | grep --quiet foo && echo 'yes' || echo 'no'

grep 매뉴얼 페이지에서:

종료 상태

일반적으로 종료 상태는 선택한 행이 발견되면 0이고 그렇지 않으면 1입니다. 그러나 -q, --quiet 또는 --silent 옵션을 사용하고 선택한 행을 찾지 않는 한 오류가 발생한 경우 종료 상태는 2입니다.

답변2

"하나의 라이너"가 무엇을 의미하는지 잘 모르겠습니다. 저에게는 이것이 "하나의 라이너"입니다.

; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; figrep 명령 뒤에 추가하기만 하면 됩니다.

bash$ grep ABCDEF /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
No
bash$ grep nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
nameserver 212.27.54.252
Yes

grep 결과를 억제하려면 grep에 -q 플래그를 추가하세요.

bash$ grep -q nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
Yes

답변3

이 버전은 중간 버전입니다.웹보이드의버전과반경버전:

if grep --quiet foo bar; then echo "yes"; else echo "no"; fi

$?전자보다 더 읽기 쉽고 후자처럼 불필요하게 사용되지 않습니다 .

관련 정보