在将文件发送到管道之前在文件的顶部和底部添加行

Kar*_*lek 2 linux bash

比方说,我有一个文本文件text.

我想要做的是将文本文件放入管道(如cat text |),但在顶部和底部添加了行 - 但没有创建新文件(因为text文件有点大)或修改它.

那可能吗?我在想,echo $(echo "line"; cat text; echo "line")但我不喜欢那样.

Pau*_*ine 7

来自man bash:

(list)列表在子shell环境中执行(参见下面的COMMAND EXECUTION ENVIRONMENT).影响shell环境的变量赋值和内置命令在命令完成后不会保持有效.返回状态是列表的退出状态.

所以这应该工作:

(echo first line; cat file; echo last line) | some_command
Run Code Online (Sandbox Code Playgroud)

正如chepner所建议的,当你不需要子shell时,你可以使用{}而不是().在这种情况下,;必须包括组中的最后一个命令.

在评论中,Pyrolistical记得如果你有一个传入的管道而不是一个文件,这也有效:

some_program | (echo first line; cat -; echo last line) | some-other-command
Run Code Online (Sandbox Code Playgroud)

与许多unix命令行应用程序一样,如果文件名参数为" cat是",-则表示"从标准输入读取".

  • 你也可以在这里使用一个简单的命令组:`{echo first; 猫文件; 回声最后; } | some_command`.不需要子壳 (3认同)