![찾기 출력에서 "권한 거부"를 필터링하려면 어떻게 해야 합니까? [복사]](https://linux55.com/image/44922/%EC%B0%BE%EA%B8%B0%20%EC%B6%9C%EB%A0%A5%EC%97%90%EC%84%9C%20%E2%80%8B%E2%80%8B%22%EA%B6%8C%ED%95%9C%20%EA%B1%B0%EB%B6%80%22%EB%A5%BC%20%ED%95%84%ED%84%B0%EB%A7%81%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
나는 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
단순히 작성된 모든 내용을 폐기합니다.표준 에러.