使用sed将文本附加到文件

时间:2014-03-09 23:14:01

标签: bash shell text sed edit

如何使用sed将文本写入文件?更具体地说,我会将空变量添加到使用touch创建的空白文本文件中。 sed的语法让我非常困惑。

4 个答案:

答案 0 :(得分:17)

如果您只是将文字附加到文件的末尾,那么您首先不会使用sed。

echo "some text" >> somefile.txt

答案 1 :(得分:10)

sed -i "$ a some text" somefile.txt

答案 2 :(得分:2)

添加迟到的帖子,因为虽然接受的答案是解决此问题的最简单方法,但问题实际上突出了几个常见情况:

  1. 需要通过sudo编辑文件
  2. 尝试使用sed修改空文件。
  3. 简而言之,您不能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的答案将该输出重定向到一个文件。