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

时间:2013-02-22 16:50:06

标签: linux bash

我有一个文本文件,比如text

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

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

3 个答案:

答案 0 :(得分:7)

来自man bash:

  

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

所以这应该有效:

(echo first line; cat file; echo last line) | some_command

根据chepner的建议,当您不需要子贝壳时,可以使用{}代替()。在这种情况下,;是必需的,包括组中的最后一个命令。

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

some_program | (echo first line; cat -; echo last line) | some-other-command

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

答案 1 :(得分:1)

从此问题复制Add new lines to top and bottom of every text file

cat text |sed -e '1 i beginning_line'| sed -e '$s@$@\nending_line@' |
它似乎有效。

答案 2 :(得分:0)

将行添加到管道输出, 在顶部添加一行:(来源-@Karel Bilek的评论)

cat text.txt | sed -e '1 i my first line'

在底部添加一行:(源-https://askubuntu.com/a/968585

cat text.txt | sed -e '$a my last line'

例如:尝试使用单引号

cat text.txt | sed -e '1 i my first line' | sed -e '$a my last line'

输出:

my first line
this is
my
text
file
my last line