- 管的輸出發送到
STDOUT
同時 - 管的過濾器輸出,並將其寫入到文件
我試圖
cat file | tee | sed 's/abc/def/g' >> log.txt
我在log.txt中獲得了所需的過濾輸出,但沒有任何內容發送到STDOUT
通過tee
STDOUT
同時我試圖
cat file | tee | sed 's/abc/def/g' >> log.txt
我在log.txt中獲得了所需的過濾輸出,但沒有任何內容發送到STDOUT
通過tee
如果目標是要看到在終端上的完整文件而發送所述過濾的文件到log.txt
,然後嘗試:
cat file | tee /dev/tty | sed 's/abc/def/g' >> log.txt
在這種情況下,tee
將輸出發送到stdout,在本請轉至sed
,並轉至/dev/tty
這是您的終端。
或者,如果你有bash或其他高級shell:
cat file | tee >(sed 's/abc/def/g' >> log.txt)
這裏,tee
發送輸出到標準輸出,並且還到在命令行上列出的文件。在上面,我們要求bash從你的sed
命令中創建一個類似文件的對象。這是用咒語>(...)
完成的,也叫做進程替換。無論發信到那個「文件」,都會顯示爲標準輸入,它會處理它並將其發送到log.txt
。另外,tee
將寫入stdout,在這種情況下,與上面的第一條命令不同,它是終端。
(我會假設你正在使用cat file
一個替身更復雜的指令,而不是作爲一個無用的使用cat
。)
這可能爲你工作(GNU SED):
sed 's/abc/def/gw fileChanges' <fileIn >fileOut
這會將更改僅寫入fileChanges
,並將原始文件寫入fileOut
(如果不提供文件,則將其更改爲stdout)。
'cat file | tee everything.txt | sed's/abc/def/g'>> filtered.txt'。過濾的數據應該轉到「filtered.txt」;未過濾的數據爲「everything.txt」。 – FoggyDay 2015-02-23 04:35:31
'tee'確實將所有內容都發送給它的標準輸出。只是你有'tee'stdout連接到一個管道才能成爲'sed'的標準輸入。 – twalberg 2015-02-23 18:47:52