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)