에 텍스트를 출력하는 스크립트가 stdout
있습니다. 터미널 에서이 모든 출력을보고 싶으며 동시에 일부 줄을 필터링하고 파일에 저장하려고합니다. 예:
$ myscript
Line A
Line B
Line C
$ myscript | grep -P 'A|C' > out.file
$ cat out.file
Line A
Line C
터미널에서 첫 번째 명령의 출력을보고 두 번째 명령의 출력을 파일에 저장하고 싶습니다. 동시에. 나는 사용하여 시도 tee
,하지만 결과,이나와 더 나은와 반대의 결과 .
답변
터미널에서 첫 번째 명령의 출력을보고 두 번째 명령의 출력을 파일에 저장하고 싶습니다.
보고있는 내용이 stdout 또는 stderr 에서 오는 것이 중요하지 않은 한 여전히 다음을 사용할 수 있습니다 tee
.
myscript | tee /dev/stderr | grep -P 'A|C' > out.file
리눅스에서 작동합니다; “/ dev / stderr”이 다른 * nix에 똑같이 적용되는지 모르겠습니다.
답변
{ ... | 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)
답변
다른 방법은 sed
다음 과 같습니다.
myscript | sed '/PATTERN/w out.file'
기본적으로 sed
모든 행을 인쇄 하므로이 경우 stdout 은 stdin 과 동일합니다 (예 : myscript
화면 의 전체 출력이 표시됨).
또한, 모든 행은 일치 PATTERN
한다 w
으로 리튼out.file
답변
tee 명령 사용 방법을 지정하지 않았지만 작동해야합니다.
myscript | grep -P 'A|C' | tee out.file
적어도 몇 분 전에 서버에서 작동했습니다 …