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

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

远程位置上有一个自动生成的文件,该文件不断变化,我只能通过ssh user@ip cat luckyNumbers它查看远程文件,它告诉我今天的幸运数字,并传递秘密加密消息。

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

我的目标是

  • 将幸运数字重定向1 2 3到 luckynumbers.txt 然后
  • 将文件的其余部分通过管道传输到我的程序中decoder
  • 我想在不保存整个文件或对该文件发出第二次请求的情况下执行此操作

我不确定是否可以像这样分割数据流。

答案1

以下是几种将 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 可能会添加一个换行符。

答案2

cat luckynumber | tail -q -n 2 | head -q -n 1 > luckynumbers.txt && cat luckynumber | tail -w -n 1 | decoder
  • 将获取以下内容幸运数字
  • 悄悄地(没有引用源文件)取出最后两行
  • 将倒数第二行发送至幸运数字.txt
  • 拾取内容幸运数字再次
  • 快速只取出最后一行
  • 并将其通过管道传输到解码器

我知道它会对该文件发出第二次请求,并将尝试对此进行改进,以便其替换不会发出第二次请求(也许与球座),但现在,这就是我所拥有的。

相关内容