Linux

帶有附加管道的部分重定向

  • March 27, 2019

在遠端位置有一個自動生成的文件不斷變化,我只能通過ssh user@ip cat luckyNumbers它查看遠端文件告訴我今天的幸運數字並傳遞秘密加密消息。

Today's lucky number are 
1 2 3 
asdsa@!#SAxAaas 21gv3sad ASD@!#

我的目標是

  • 將幸運數字重定向1 2 3到 luckynumbers.txt 然後
  • 將文件的其餘部分通過管道傳輸到我的程序中decoder
  • 我想在不保存整個文件或再次請求文件的情況下執行此操作

我不確定是否可以像這樣拆分數據流。

這裡有幾種方法可以將 stdin 的第 2 行寫入特定文件,同時將所有其他行發送到 stdout。

使用 sed:

ssh remotehost cat luckynumbers |
sed -e '2 { w luckynumbers.txt
           d
         }' |
decoder

使用 awk:

ssh remotehost cat luckynumbers |
awk 'NR == 2 { print > "luckynumbers.txt" }
    NR != 2 { print }' |
decoder

請注意,如果輸入的最後一行沒有以換行符結尾,則 awk 可能會添加一個。

cat luckynumber | tail -q -n 2 | head -q -n 1 > luckynumbers.txt && cat luckynumber | tail -w -n 1 | decoder
  • 會拿起luckynumber的內容
  • 悄悄地(不引用源文件)取出最後兩行
  • 將倒數第二行發送到luckynumbers.txt
  • 再次 拿起luckynumber的內容
  • 快速只拔出最後一行
  • 並將其通過管道傳輸到解碼器

我知道它對文件提出了第二個請求,並將嘗試對此進行改進,因此它的替換不會發出第二個請求(可能與tee),但現在,這就是我所擁有的。

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