【发布时间】:2014-04-12 22:16:10
【问题描述】:
如何使用 sed 将文本写入文件?更具体地说,我会将空变量添加到使用触摸创建的空白文本文件中。 sed 的语法让我很困惑。
【问题讨论】:
-
如果文件为空,为什么要使用
sed?只需echo或printf在文件中添加您想要的内容。 -
请向我们展示您的尝试,连同您的结果,以及您期望的输出示例。
如何使用 sed 将文本写入文件?更具体地说,我会将空变量添加到使用触摸创建的空白文本文件中。 sed 的语法让我很困惑。
【问题讨论】:
sed?只需 echo 或 printf 在文件中添加您想要的内容。
使用$ a。
sed -i "$ a some text" somefile.txt
【讨论】:
touch 创建的空文件(0 字节)(如要求)。
sudo 一起使用,而sudo echo > file 将执行sudo echo,然后将输出作为非sudo重定向到@987654327 @
a 命令没有被 POSIX 正确标准化,因此它是否适用于空文件可能取决于平台。语法正确的sed -i '' 'a$\ (换行符)some text' somefile.txt 实际上并没有修改 MacOS Big Sur 上的空文件,就像 @doak 已经说过的那样(大概是关于 Linux)。
如果您只是将文本附加到文件末尾,那么您一开始就不会使用 sed。
echo "some text" >> somefile.txt
【讨论】:
添加一个较晚的帖子,因为虽然接受的答案是解决此问题的最简单方法,但该问题实际上突出了几种常见情况:
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 ...
【讨论】:
对我来说,这听起来像是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 的回答将该输出重定向到一个文件。
【讨论】: