명령 출력에서 ​​정확한 단어를 인쇄하고 싶습니다.

명령 출력에서 ​​정확한 단어를 인쇄하고 싶습니다.
telnet test | grep -o Unable
telnet: Unable to connect to remote host: Connection refused

결과는 "불가능"이어야 합니다.

답변1

telnet연결할 수 없을 때 출력되는 오류 메시지가 표준으로 인쇄됩니다.실수개울. 기본적으로 표준 오류 스트림은 터미널로 직접 전송됩니다. 표준 파이프만 사용할 수 있습니다.산출다른 명령으로 이동합니다( grep이 경우).

오류 스트림을 표준 출력 스트림으로 리디렉션할 수 있습니다.

telnet test 2>&1 | grep -o Unable

그러면 두 스트림이 병합되어 grep병합된 데이터 스트림으로 작동합니다.

오류 조건을 캡처하려는 경우 telnet유틸리티의 종료 상태를 사용할 수도 있습니다 .

if ! telnet test 2>/dev/null; then
    echo 'something went wrong with telnet'
    exit 1
fi

echo 'telnet ran successfully'

telnet0이 아닌 종료 상태가 반환되면(일종의 실패를 나타냄) 스크립트가 종료됩니다. 또한 오류 스트림을 리디렉션하여 /dev/null완전히 삭제했습니다.

답변2

메시지가 stderr에 인쇄된 것처럼 보이므로 다음을 수행하십시오.

telnet test 2>&1 | grep -o Unable

Bash 및 ZSH에서는 다음을 사용할 수도 있습니다 |&.

telnet test |& grep -o Unable

관련 정보