如何使用sed将文本写入文件?更具体地说,我会将空变量添加到使用touch创建的空白文本文件中。 sed的语法让我非常困惑。
答案 0 :(得分:17)
如果您只是将文字附加到文件的末尾,那么您首先不会使用sed。
echo "some text" >> somefile.txt
答案 1 :(得分:10)
sed -i "$ a some text" somefile.txt
答案 2 :(得分:2)
添加迟到的帖子,因为虽然接受的答案是解决此问题的最简单方法,但问题实际上突出了几个常见情况:
sed
修改空文件。简而言之,您不能touch
,然后使用sed
编辑文件。
Sed不会处理空文件,但偶尔你需要做相同的
sudo echo "some text" >> somefile.txt
sudo并不喜欢重定向,但有一些解决方法:
echo "some text" | sudo tee somefile.txt
或者管道也不是一个选项,或者你只是必须使用sed,或者你只是喜欢复杂性:
dd if=/dev/zero count=1 bs=1 of=somefile.txt
sed -i '$ a some text' somefile.txt
sed -i '1 d' somefile
在某些系统上。您可能必须使用sed -i -e '$ a ...
答案 3 :(得分:1)
对我来说这听起来像XY Problem。如果您询问您尝试解决的问题,而不是寻求帮助实施特定解决方案,您可能会获得更好或更有用的答案。
但是如果你绝对必须在sed中这样做,你可以使用sed的r
命令来读取文件。例如:
[ghoti@pc ~/tmp]$ cat one
RED
BLUE
[ghoti@pc ~/tmp]$ cat two
green
yellow
[ghoti@pc ~/tmp]$ echo ">> start"; sed '$r two' one; echo ">> end"
>> start
RED
BLUE
green
yellow
>> end
[ghoti@pc ~/tmp]$
sed命令$r two
在处理完最后一行输入后(在这种情况下是来自文件“one”),导致sed在名为“two”的文件中啜泣。
请注意,这会将一个文件合并到另一个文件的流中,但是sed的“标准输出”(stdout
)包含完整/组合流。如果这是你想要的,你可以根据Ignacio的答案将该输出重定向到一个文件。