【问题标题】:Append text to file using sed使用 sed 将文本附加到文件
【发布时间】:2014-04-12 22:16:10
【问题描述】:

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

【问题讨论】:

  • 如果文件为空,为什么要使用sed?只需 echo 或 printf 在文件中添加您想要的内容。
  • 请向我们展示您的尝试,连同您的结果,以及您期望的输出示例。

标签: bash shell text sed edit


【解决方案1】:

使用$ a。

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

【讨论】:

  • 了解如何使用 sed 实际执行此操作很有用。有时您想使用 sed 对文件进行多项更改,包括在末尾添加一行,并且能够在单个命令中完成此操作非常好。
  • 这不适用于touch 创建的空文件(0 字节)(如要求)。
  • 特别有用,因为它可以与sudo 一起使用,而sudo echo > file 将执行sudo echo,然后将输出作为非sudo重定向到@987654327 @
  • 这是 MacOS 和其他 *BSD 平台上的语法错误。 a 命令没有被 POSIX 正确标准化,因此它是否适用于空文件可能取决于平台。语法正确的sed -i '' 'a$\ (换行符)some text' somefile.txt 实际上并没有修改 MacOS Big Sur 上的空文件,就像 @doak 已经说过的那样(大概是关于 Linux)。
【解决方案2】:

如果您只是将文本附加到文件末尾,那么您一开始就不会使用 sed。

echo "some text" >> somefile.txt

【讨论】:

  • 我一直在使用示例来更改文件中的变量,我想也许您也可以添加它们。这要简单得多。
【解决方案3】:

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

  1. 需要通过 sudo 编辑文件
  2. 尝试使用sed 修改空文件。

简而言之,你不能touch,然后用sed 编辑一个文件。 sed 对空文件不起作用,但有时你需要做相当于

sudo echo "some text" >> somefile.txt

sudo 不喜欢重定向,但有一些解决方法:

echo "some text" | sudo tee --append 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 ...

【讨论】:

    【解决方案4】:

    对我来说,这听起来像是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 导致 sed 在处理最后一行输入(在本例中来自文件“one”)后在名为“two”的文件中啜饮。

    请注意,这会将一个文件合并到另一个文件的流中,但 sed 的“标准输出”(stdout)是包含完整/组合流的内容。如果这是您想要的,您可以根据 Ignacio 的回答将该输出重定向到一个文件。

    【讨论】:

    • 感谢您的信息。我认为这超出了我正在做的事情的范围。您可以查看我的脚本。 pastebin.com/TGvmWmfG 我的下一个目标是让它从脚本中编写启动守护程序,而不是复制它。告诉我如何做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多