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在没有此选项的情况下运行,但将输出重定向到新文件。然后用新创建的文件替换旧文件。
Ank*_*hah 33
echo 用于获取文本。Cat filename - 在控制台中打印文件,> 使用它发送到另一个文件 filename1,然后我们将 filename1 移动到 filename 以将文本插入到所需文件的第一行。
(echo "some text" && cat filename) > filename1 && mv filename1 filename
Run Code Online (Sandbox Code Playgroud)
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答案相反,这也适用于空文件。
您想在第一行之前插入文本而不是将其附加在其后,因此请使用
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选项,则不会显示任何错误,并在标准终端上显示输出,但不会在文件中插入文本。
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 保存对文件的更改并退出。