Io-Redirection

將標準輸出及其替換加入表中

  • July 3, 2019

說我有:

$ cat tmp1.txt
a
b
c

然後

$ paste tmp1.txt <(tr '[:lower:]' '[:upper:]'<tmp1.txt)
a   A
b   B
c   C

我將如何將以上內容修改為

1/ 只呼叫tmp1.txt一次?(我懷疑tee

2/ 提供tmp1.txt來自終端的內容(就像由命令的輸出產生的一樣)。為此,我試圖對此進行修補,但並沒有走得太遠:

$ cat<< 'EOF' | tee >(tr '[:lower:]' '[:upper:]')
a
b
c
EOF

輸出:

a
b
c
A
B
C

tee使用命名管道為和之間的數據創建附加通道tr

$ mkfifo pipe
$ tee pipe <file | paste - <( tr '[:lower:]' '[:upper:]' <pipe )
a       A
b       B
c       C

或者(但不那麼好看),將 移動tr到左側|

$ mkfifo pipe
$ tee >( tr '[:lower:]' '[:upper:]' >pipe ) <file | paste - pipe

您需要額外的命名管道才能提供由trto轉換的數據paste。該paste實用程序需要讀取兩個流,即原始數據和轉換後的數據。其中一個可以是標準流,而另一個需要來自原始文件(第二次讀取文件)或命名管道,如上所示。

引用自:https://unix.stackexchange.com/questions/528112