grep이 무언가를 반환하는지 확인하는 하나의 라이너? [복사]

grep이 무언가를 반환하는지 확인하는 하나의 라이너? [복사]

기기가 ThinkPad인지 아니면 다음과 같은 것을 사용하고 있지 않은지 확인하려고 합니다.

sudo dmidecode | grep ThinkPad

최종 결과가 true 또는 false(또는 1/0)를 반환하기를 원합니다.

내 생각에 해결책은 다음과 같습니다.

sudo dmidecode | grep -c ThinkPad | test xargs -gt 0

xargs하지만 여기서는 올바르게 사용하는 방법을 잘 모르겠습니다 .

답변1

뒤에 종료 상태 확인을 추가하면 grep기본적으로 항상 파이프라인의 마지막 명령에서 종료 상태를 가져옵니다.

sudo dmidecode | grep -q ThinkPad; echo $?

종료 상태에만 관심이 있으므로 -q출력을 억제하는 데 사용됩니다 .grep


원하는 경우 명령 그룹화를 사용할 수 있지만 여기서는 약간 중복됩니다.

sudo dmidecode | { grep -q ThinkPad; echo $? ;}

답변2

검사와 함께 쉘 스크립트를 사용하려는 경우 ifheemayl의 제안을 따르십시오 -q.

if sudo dmidecode | grep -q Thinkpad
then
    echo "I'm a Thinkpad"
fi

if블록은 명령의 종료 상태를 확인하므로 종료 상태를 인쇄하여 다른 것과 비교하는 grep대신 종료 상태에 직접 의존 할 수 있습니다.$?

답변3

에서 영감을 받다힘멜의 답변:

sudo dmidecode | grep -q ThinkPad && echo true || echo false

grep이 ThinkPad를 찾으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

답변4

sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt

원하는 결과를 얻으려면 xargs및 명령과 해당 피연산자를 다시 정렬해야 합니다 . test0이 아닌(>0) ThinkPad가 라인을 구성하는 경우 true를 반환합니다.

또는 테스트 명령의 피연산자 순서를 유지하려면 다음을 수행할 수 있습니다.

sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0

그런 다음 두 명령 모두에서 $?다음과 같이 변수 값을 확인하여 grep 성공/실패의 운명을 결정합니다.

if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
   echo "success hooray!"
else 
   echo nothing
fi

관련 정보