Linux 在将文件发送到管道之前,在文件的顶部和底部添加行
我有一个文本文件,比如说,Linux 在将文件发送到管道之前,在文件的顶部和底部添加行,linux,bash,Linux,Bash,我有一个文本文件,比如说,text 我想做的是将文本文件放入管道中(如cat text |),但在顶部和底部添加一行,但不创建新文件(因为文本文件有点大)或修改它 可能吗?我在想echo$(echo“line”;cat text;echo“line”),但我不喜欢这样。抄袭了这个问题: 这似乎有效。来自man bash: (list)list在子shell环境中执行(请参见下面的命令执行环境)。影响shell环境的变量指定和内置命令在命令完成后不会保持有效。 返回状态是列表的退出状态 因此,这应
text
我想做的是将文本文件放入管道中(如cat text |
),但在顶部和底部添加一行,但不创建新文件(因为文本
文件有点大)或修改它
可能吗?我在想echo$(echo“line”;cat text;echo“line”)
,但我不喜欢这样。抄袭了这个问题:
这似乎有效。来自man bash:
(list)list在子shell环境中执行(请参见下面的命令执行环境)。影响shell环境的变量指定和内置命令在命令完成后不会保持有效。
返回状态是列表的退出状态
因此,这应该是可行的:
(echo first line; cat file; echo last line) | some_command
正如所建议的,当您不需要子shell时,可以使用{}
而不是()
。在这种情况下,代码>是必需的,包括组中的最后一个命令
在注释中,如果您使用的是传入管道而不是文件,则此操作也有效:
some_program | (echo first line; cat -; echo last line) | some-other-command
与许多unix命令行应用程序一样,如果cat
的filename参数为-
,则表示“从标准输入读取”。将行添加到管道输出,
在顶部添加一行:(来源-@Karel Bilek的评论)
在底部添加一行:(源-)
e、 g:用单引号试试这个
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
在bash中,只有括号(没有第一个echo和$
)应该可以工作。您也可以为额外的行创建一个文件并执行:cat first-line text
您也可以在这里使用一个简单的命令组:{echo first;cat file;echo last;}| some_command
。没有必要使用subshell,我想可能有比复杂更简单的东西。谢谢@切普纳:当我这样做时,文件似乎打印在标准输出上,而不是打印到管道上。如果你有一个传入管道,你可以一些程序|(echo first line;cat-;echo last line)|一些其他命令
@pyrolistic,你应该添加它作为一个单独的答案,以提高可见性。这正是我想要的,但我第一次读这一页时就错过了。
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