명령의 출력을 grep으로 파이프한 다음 다른 명령으로 파이프합니다.

명령의 출력을 grep으로 파이프한 다음 다른 명령으로 파이프합니다.

한 스크립트의 출력을 가져온 다음 이 입력을 grep으로 파이프하고 grep의 출력을 다른 스크립트로 파이프합니다.

./script1 | grep 'expr' | ./script2

그러나 두 번째 스크립트는 입력을 전혀 받지 못합니다. 마찬가지로, script2with catscript1with를 바꾸면 아무것도 인쇄되지 않습니다 ping.

ping localhost | grep localhost | cat

grep내가 다음으로 바꾸면 awk:

ping localhost|awk '{print $1}'|cat

무슨 일이야?

답변1

grep버퍼링입니다(출력이 터미널이 아니라고 판단하기 때문입니다. 엄밀히 말하면 이는 C 라이브러리 동작입니다).

이 기능을 비활성화하려면 다음을 실행하십시오 unbuffer -p(표준 입력에서 데이터를 읽어야 -p함).unbuffer

ping localhost | unbuffer -p grep localhost | cat

또는 grep행별 버퍼링을 지정합니다(지원되는 경우).

ping localhost | grep --line-buffered localhost | cat

관련 정보