2

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

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

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

4

3 回答 3

8

来自 man bash:

(list) list 在子shell 环境中执行(参见下面的命令执行环境)。影响 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 命令行应用程序一样,如果文件名参数为catis -,则表示“从标准输入读取”。

于 2013-02-22T16:57:12.503 回答
1

从这个问题复制在每个文本文件的顶部和底部添加新行

cat text |sed -e '1 i beginning_line'| sed -e '$s@$@\nending_line@' |

它似乎工作。

于 2013-02-22T16:54:20.620 回答
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
于 2020-04-03T07:04:42.243 回答