使用sed将文本附加到文件

Geo*_*rey 12 bash shell text sed edit

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

Ign*_*ams 18

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

echo "some text" >> somefile.txt
Run Code Online (Sandbox Code Playgroud)


小智 14

sed -i "$ a some text" somefile.txt
Run Code Online (Sandbox Code Playgroud)

  • 了解如何使用 sed 实际执行此操作很有用。有时您想使用 sed 对文件进行多次更改,包括在末尾添加一行,能够在单个命令中完成此操作非常好。 (7认同)
  • 这不适用于由 `touch` 创建的空文件(0 字节)(如所要求的)。 (7认同)
  • 这是 MacOS 和其他 *BSD 平台上的语法错误。`a` 命令没有被 POSIX 正确标准化,所以它是否在空文件上工作可能取决于平台。语法上正确的 `sed -i '' 'a$\ ` (newline) `some text' somefile.txt` 实际上并不修改 MacOS Big Sur 上的空文件,就像 @doak 已经评论过的那样(大概是关于 Linux)。 (2认同)

Dav*_*llo 7

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

  1. 需要通过 sudo 编辑文件
  2. 试图用来sed修改一个空文件。

简而言之,您不能touch,然后使用sed. sed 对空文件不起作用,但偶尔你需要做相当于

sudo echo "some text" >> somefile.txt
Run Code Online (Sandbox Code Playgroud)

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

echo "some text" | sudo tee somefile.txt
Run Code Online (Sandbox Code Playgroud)

或者如果管道也不是一种选择,或者您必须使用 sed,或者您只是喜欢复杂性:

dd if=/dev/zero count=1 bs=1 of=somefile.txt
sed -i '$ a some text' somefile.txt
sed -i '1 d' somefile
Run Code Online (Sandbox Code Playgroud)

在某些系统上,。你可能不得不使用sed -i -e '$ a ...