如何在文件的第一行之前插入文本?

Man*_*olo 114 sed text-processing

我一直在寻找sed将文本添加到文件中特定行的命令。这可以在第 1 行之后添加文本:

sed '1 a\
Run Code Online (Sandbox Code Playgroud)

但我想第 1 行之前添加它。它将是:

sed '0 a\
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:invalid usage of line address 0

有什么建议吗?

sus*_*tus 165

使用sed的 insert ( i) 选项将在前一行中插入文本。

sed '1 i\
Run Code Online (Sandbox Code Playgroud)

问题作者更新:

为了让它就地编辑文件 - 使用 GNU sed- 我必须添加 -i选项:

sed -i '1 i\anything' file
Run Code Online (Sandbox Code Playgroud)

还有语法

sed  -i '1i text' filename
Run Code Online (Sandbox Code Playgroud)

对于非 GNU sed

您需要在反斜杠1i\之后和之后立即按回车键first_line_text

sed -i '1i\
first_line_text
'
Run Code Online (Sandbox Code Playgroud)

另请注意,某些非 GNUsed实现(例如 macOS 上的实现)需要-i标志参数(用于-i ''获得与 GNU 相同的效果sed)。

对于sed根本不支持的实现,请-i在没有此选项的情况下运行,但将输出重定向到新文件。然后用新创建的文件替换旧文件。

  • 不适用于空文件。 (4认同)
  • 在这里,使用`sed (GNU sed) 4.2.2` 只需`sed '1 i text to insert' -i file` 就像一个魅力。谢谢 (2认同)

Ank*_*hah 33

echo 用于获取文本。Cat filename - 在控制台中打印文件,> 使用它发送到另一个文件 filename1,然后我们将 filename1 移动到 filename 以将文本插入到所需文件的第一行。

  (echo "some text" && cat filename) > filename1 && mv filename1 filename
Run Code Online (Sandbox Code Playgroud)

  • 请让我知道为什么以下内容被否决 (9认同)
  • 这是很好的解决方案!它在 Makefile 和 MacOS 中运行良好。 (2认同)

Ste*_*nny 22

您可以使用 POSIX 工具ex

ex a.txt <<eof
1 insert
Sunday
.
xit
eof
Run Code Online (Sandbox Code Playgroud)

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html


rud*_*ier 11

使用 GNU awk >= 4.1:

awk -i inplace 'BEGINFILE{print "first line"}{print}' foo.sh
Run Code Online (Sandbox Code Playgroud)

与所有sed答案相反,这也适用于空文件。


Jos*_* R. 7

您想在第一行之前插入文本而不是附加在其后,因此请使用

sed '1 i\
your_text' your_file
Run Code Online (Sandbox Code Playgroud)

此处的文档也可以提供帮助:

cat /dev/stdin your_file <<EOI
Your text
goes here
EOI
Run Code Online (Sandbox Code Playgroud)


小智 7

sed  -i '1i new_text' file_name
Run Code Online (Sandbox Code Playgroud)

如果不指定该-i选项,则不会显示任何错误,并在标准终端上显示输出,但不会在文件中插入文本。


Wil*_*ard 5

0a您尝试的命令确实可以在 中运行ex,该命令的前身是vi

printf '%s\n' 0a 'Anything you want to add' . x | ex file.txt
Run Code Online (Sandbox Code Playgroud)

printf命令本身输出:

0a
Anything you want to add
.
x
Run Code Online (Sandbox Code Playgroud)

表示0a附加在第 0 行之后(即第一行之前)。

下一行或多行是要添加的文字文本。

一行.中的 本身终止“追加”命令。

x会导致 Ex 保存对文件的更改并退出。