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

이것을 검사와 함께 쉘 스크립트를 사용하려면 heemayl이 제안한대로 if사용하십시오 -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

ThinkPad가 grep으로 발견되면 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

관련 정보