찾기 출력에서 ​​"권한 거부"를 필터링하려면 어떻게 해야 합니까? [복사]

찾기 출력에서 ​​"권한 거부"를 필터링하려면 어떻게 해야 합니까? [복사]

나는 sed최근에 그것을 사용하기 시작했습니다. 내가 사용하는 편리한 방법은 로그 파일에서 중요하지 않은 줄을 무시하는 것입니다.

tail -f example.com-access.log | sed '/127.0.0.1/d;/ELB-/d;/408 0 "-" "-"/d;'

하지만 유사하게 사용하려고 하면 find결과가 예상과 다릅니다. 다음과 같이 "Permission Denied"가 포함된 줄을 무시하려고 합니다.

find . -name "openssl" | sed '/Permission denied/d;'

그러나 여전히 "권한 거부" 메시지가 많이 표시됩니다 stdout.

편집하다

아래 정답에서 언급했듯이 "Permission Denied" 메시지가 stderr및 NOT 에 나타납니다 stdout.

답변1

문제는 오류 출력이 다음으로 인쇄된다는 것입니다.표준 에러이므로 sed명령이 입력을 캡처할 수 없습니다. 간단한 해결책은 stderr를 stdout으로 리디렉션하는 것입니다.

find . -name "openssl" 2>&1 | sed '/Permission denied/d;'

답변2

sed왜 삭제 하려고 하는지 모르겠네요허가가 거부되었습니다find- 사용 방법을 배우고 싶지 않은 경우 출력의 메시지입니다 sed.

나는 간단히 이것을 실행합니다 :

찾다. -이름 "openssl" 2>/dev/null

여기로 리디렉션 중입니다.표준 에러(파일 설명자2)로 이동합니다 /dev/null( 참조 man null). 즉, 2>/dev/null단순히 작성된 모든 내용을 폐기합니다.표준 에러.

관련 정보