출력을 필터링하고 리디렉션하는 방법

출력을 필터링하고 리디렉션하는 방법

STDOUT으로 많은 출력을 생성하는 명령이 있는데 다음과 같이 이를 파일로 리디렉션할 수 있다는 것을 알고 있습니다.

./myCMD 1>tmp

출력을 파일로 리디렉션하기 전에 필터링하는 방법 예를 들어 특정 키워드가 포함된 출력 행만 리디렉션하고 싶습니다.

답변1

tmp특정 줄만 파일에 넣고 나머지는 변경하지 않으려 는 경우 :

cmd | awk '/pattern/ {print > "tmp"; next}
           {print}'

또는:

cmd | sed '/pattern/!b
           w tmp
           d'

(한 줄 cmd | sed -e '/pattern/!b' -e 'w tmp' -e d:)

또는:

cmd | sed '/pattern/ {
             w tmp
             d
           }'

(한 줄 cmd | sed -e '/pattern/{w tmp' -e 'd;}':)

sed에 대한 pattern기초적인정규 표현식인 반면, 에 대해서는 awk다음과 같습니다.확장하다정규식.

답변2

파이프를 사용하여 이 작업을 수행할 수 있습니다.

./myCMD | grep keyword > tmp

그러면 "키워드"가 포함된 줄만 파일에 기록됩니다 tmp.

전체 출력을 보고 싶지만 그 중 일부만 파일에 기록하려면 다음을 추가하십시오 tee(셸이 프로세스 대체를 지원한다고 가정).

./myCMD | tee >(grep keyword > tmp)

관련 정보