我一直在寻找sed
将文本添加到文件中特定行的命令。这可以在第 1 行之后添加文本:
sed '1 a\
但我想添加它前第 1 行。它将是:
sed '0 a\
但我收到此错误:invalid usage of line address 0
。
有什么建议吗?
答案1
使用 的sed
insert ( i
) 选项将在前一行插入文本。
sed '1 i\
问题作者的更新:
为了让它在适当的位置编辑文件 - 使用 GNU sed
- 我必须添加
-i
选项:
sed -i '1 i\anything' file
还有语法
sed -i '1i text' filename
对于非 GNU sed
您需要在反斜杠之后1i\
和之后立即按回车键first_line_text
:
sed -i '1i\
first_line_text
'
另请注意,一些非 GNUsed
实现(例如 macOS 上的实现)要求标志的参数-i
(用于-i ''
获得与 GNU 相同的效果sed
)。
对于根本sed
不支持的实现-i
,请在不使用此选项的情况下运行,但将输出重定向到新文件。然后用新创建的文件替换旧文件。
答案2
Echo 用于获取文本。 Cat filename - 在控制台中打印文件,然后使用它发送到另一个文件 filename1,然后我们将 filename1 移动到 filename 以将文本插入到所需文件的第一行。
(echo "some text" && cat filename) > filename1 && mv filename1 filename
答案3
您可以使用 POSIX 工具ex
:
ex a.txt <<eof
1 insert
Sunday
.
xit
eof
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html
答案4
sed -i '1i new_text' file_name
如果不指定该-i
选项,它将不会显示任何错误,并在标准终端上显示输出,但不会将文本插入文件中。