명령 출력으로 두 가지 작업 수행


9

texcountLaTeX 문서의 단어 수를 출력 하는 프로그램 이 있습니다. 또한 출력을 파이프하여 sed줄 바꿈을 TeX 줄 바꿈하고 파일에 작성하여 최종 문서에 포함시킬 수 있습니다. 그러나 내가 할 texcount foo.tex | sed s/$/'\\\\'/ > wc.tex때 명령 줄 출력 texcount이 억제됩니다.

어떻게는 첫 번째 명령의 출력은 터미널에 표시 할 얻을 수 있습니다 나오지에 파이프?

답변:


9

두 번째 명령에 익명 파이프를 사용할 수 있습니다.

texcount foo.tex | tee >(sed s/$/'\\\\'/ > wc.tex)

이 답변의 필수 부분은 사용하는 것 tee입니다. Bash와 같은 특정 쉘인 경우을 사용하여 티의 출력을 파이프 할 수 있습니다 >(some further commands). 다른 셸에서는 tee에 파일 이름 인수 (표준 작동 모드)를 제공 한 다음을 실행 some further commands < thatfile하고 해당 파일을 삭제해야합니다. 또는 아래의 Hari의 답변을 참조하십시오.
dubiousjim

티, 티 및 티.
bagavadhar

7

파이프를 분할 할 수있는 "tee"명령이 필요합니다.

texcount foo.tex | tee >output.txt | sed s/$/'\\\\'/ > wc.tex ; cat output.txt

추가 output.txt 파일이 남습니다. 자세한 정보는 다음을 읽으십시오 : http://www.unixtutorial.org/2007/12/tee-replicate-standard-output/ "man tee"도 할 수 있습니다.


texcount foo.tex | tee unmodified |sed s/$/'\\\\'/ > modified수정 및 수정되지 않은 버전의 출력을 두 파일에 넣습니다. 수정되지 않은 버전을 터미널에 어떻게 인쇄합니까? 시도 tee stdout했지만 아무 것도 인쇄되지 않습니다.
Seamus

3
tee는 입력을 stdout과 파일로 전송하기 때문에 그렇게 할 수 없습니다. 표준 출력은 sed의 입력이됩니다. && cat unmodified끝에 추가 할 수 있습니다 . 수정되지 않은 출력을 터미널에 덤프합니다.
KeithB

올바른 명령 줄은 다음과 같습니다 texcount foo.tex | tee output.txt | sed s/$/'\\\\'/ > wc.tex ; cat output.txt. 또는을 사용할 수 있습니다 texcount foo.tex | tee output.txt; sed s/$/'\\\\'/ output.txt > wc.tex. 어느 경우이든 rm output.txt나중에 나중에 원할 것입니다 .
dubiousjim

@dubiousjim 그 세미콜론은 정확합니다-파이프는 작동하지만 세미콜론은 의도 한 것을 더 잘 표현합니다.
Danny Staple

6

상당히 관용적입니다

texcount foo.tex | tee /dev/tty | sed s/$/'\\\\'/ > wc.tex

/dev/tty 현재 프로세스의 제어 터미널을 나타내는 마법 장치입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.