Làm hai việc với đầu ra từ một lệnh


9

Tôi có một chương trình texcountxuất ra số lượng từ trong tài liệu LaTeX của tôi. Tôi cũng có thể dẫn đầu ra của cái này để sedtạo ra các dòng mới TeX và ghi nó vào một tệp mà sau đó tôi có thể đưa vào tài liệu cuối cùng của mình. Nhưng khi tôi làm texcount foo.tex | sed s/$/'\\\\'/ > wc.texđầu ra dòng lệnh của texcountbị chặn.

Làm thế nào tôi có thể nhận được đầu ra của lệnh đầu tiên được hiển thị trong thiết bị đầu cuối được dẫn đến sed?

Câu trả lời:


9

Bạn có thể sử dụng một đường ống ẩn danh cho lệnh thứ hai:

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

Phần thiết yếu của câu trả lời này là sử dụng tee. Nếu bạn là một số shell nhất định như Bash, bạn có thể chuyển đầu ra của tee bằng cách sử dụng >(some further commands). Trong các shell khác, bạn phải cung cấp cho tee một đối số tên tệp (đây là chế độ hoạt động tiêu chuẩn của nó), sau đó chạy some further commands < thatfilevà sau đó xóa tệp đó. Hoặc xem câu trả lời của Har bên dưới.
dubiousjim

tee, tee & tee.
bagavadhar

7

Bạn cần lệnh "tee", cho phép bạn tách các đường ống.

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

Điều này sẽ để lại cho bạn tệp output.txt bổ sung. Đọc phần này để biết thêm: http://www.unixtutorial.org/2007/12/tee-replicate-stiteria-output/ Bạn cũng có thể làm "man tee".


texcount foo.tex | tee unmodified |sed s/$/'\\\\'/ > modifiedđặt các phiên bản sửa đổi và không sửa đổi của đầu ra trong hai tệp. Làm cách nào để in phiên bản chưa sửa đổi sang thiết bị đầu cuối? Tôi đã thử tee stdoutnhưng nó không in gì cả ...
Seamus

3
Bạn không thể làm điều đó, bởi vì tee gửi đầu vào của nó tới thiết bị xuất chuẩn và một tệp. Thiết bị xuất chuẩn là thứ trở thành đầu vào cho sed. Bạn có thể thêm && cat unmodifiedvào cuối. Điều đó sẽ đổ đầu ra không thay đổi vào thiết bị đầu cuối.
KeithB

Dòng lệnh thích hợp ở đây sẽ là texcount foo.tex | tee output.txt | sed s/$/'\\\\'/ > wc.tex ; cat output.txt. Hoặc bạn có thể sử dụng texcount foo.tex | tee output.txt; sed s/$/'\\\\'/ output.txt > wc.tex. Trong cả hai trường hợp, sau đó bạn có thể muốn rm output.txtsau đó.
dubiousjim

@dubiousjim Dấu chấm phẩy đó là chính xác - đường ống hoạt động, nhưng dấu chấm phẩy thể hiện rõ hơn những gì được dự định.
Daniel Staple

6

Bạn có thể sử dụng khá thành ngữ

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

/dev/tty là một thiết bị ma thuật đề cập đến thiết bị đầu cuối kiểm soát của quy trình hiện tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.