ทำสองสิ่งด้วยเอาต์พุตจากคำสั่ง


9

ฉันมีโปรแกรมtexcountที่แสดงจำนวนคำในเอกสาร LaTeX ของฉัน ฉันยังสามารถsedไพพ์ผลลัพธ์ของสิ่งนี้เพื่อสร้างบรรทัดใหม่ของ TeX และเขียนสิ่งนี้ลงในไฟล์ที่ฉันสามารถรวมไว้ในเอกสารสุดท้ายของฉัน แต่เมื่อฉันทำtexcount foo.tex | sed s/$/'\\\\'/ > wc.texเอาต์พุตบรรทัดคำสั่งของtexcountถูกระงับ

ฉันจะรับเอาต์พุตของคำสั่งแรกที่จะแสดงในเทอร์มินัลและไพพ์ไปยัง sed ได้อย่างไร?

คำตอบ:


9

คุณสามารถใช้ไพพ์ที่ไม่ระบุชื่อสำหรับคำสั่งที่สอง:

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

teeส่วนสำคัญของคำตอบนี้คือการใช้งาน หากคุณเป็นกระสุนบางชนิดเช่น Bash คุณสามารถใช้ท่อส่งออกของ tee >(some further commands)ได้ ในเชลล์อื่นคุณต้องให้อาร์กิวเมนต์ชื่อไฟล์ (นี่เป็นโหมดการทำงานมาตรฐาน) จากนั้นเรียกใช้some further commands < thatfileแล้วลบไฟล์นั้น หรือดูคำตอบของฮาริด้านล่าง
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 และไฟล์ 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.