我有一个文本文件,比如text
。
我想要做的是将文本文件放入管道(如cat text |
),但在顶部和底部添加了行 - 但没有创建新文件(因为text
文件有点大)或修改它。
这可能吗?我在想echo $(echo "line"; cat text; echo "line")
,但我不喜欢这样。
答案 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