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