stdout으로 출력하고 파일로 grep

stdout으로 출력하고 파일로 grep

텍스트를 stdout. 예:

$ myscript
Line A
Line B
Line C

$ myscript | grep -P 'A|C' > out.file

$ cat out.file
Line A
Line C

터미널에서 첫 번째 명령의 출력을 보고 두 번째 명령의 출력을 파일에 저장하고 싶습니다. 동시에. 을 사용해 보았 tee으나 결과가 없었습니다. 또는 더 나은 방법은 다음을 사용하는 것입니다.결과는 정반대.

답변1

터미널에서 첫 번째 명령의 출력을 보고 두 번째 명령의 출력을 파일에 저장하고 싶습니다.

당신이 보는 것이 어디에서 왔는지 상관하지 않는 한표준 출력또는표준 에러, 다음을 계속 사용할 수 있습니다 tee.

myscript | tee /dev/stderr | grep -P 'A|C' > out.file

Linux에서는 작동합니다. "/dev/stderr"가 다른 *nix에서도 작동하는지 모르겠습니다.

답변2

{ ... | tee /dev/fd/3 | grep -e A -e C > out.file; } 3>&1

또는 프로세스 대체(ksh93, zsh 또는 bash)를 사용하십시오.

... | tee >(grep -e A -e C > out.file)

zsh 사용:

... >&1 > >(grep -e A -e C > out.file)

답변3

또 다른 접근 방식은 다음과 같습니다 sed.

myscript | sed '/PATTERN/w out.file'

기본적으로 sed수신한 모든 줄을 인쇄합니다.표준 입력( myscript이것은표준 출력이 경우) 즉, myscript전체 출력이 화면에 표시됩니다.
또한 일치하는 모든 줄은 다음과 같은 파일에 기록 PATTERN됩니다 .wout.file

답변4

tee 명령을 사용하는 방법을 지정하지 않았지만 다음과 같이 작동합니다.

myscript | grep -P 'A|C' | tee out.file

적어도 몇 분 전에는 내 서버에서 실행 중이었습니다.

관련 정보