使用“sed”附加到文件末尾

使用“sed”附加到文件末尾

我目前正在使用sedstdin.我在这个脚本中使用sed它来绕过 bash 脚本限制,其中调用用户没有写入文件的权限,所以我不能简单地echo "..." >> outputfile.conf

这就是我的目的写作到文件:

echo "<VirtualHost *:80>
    ...
</VirtualHost>" | sudo sed -n "w/etc/apache2/sites-available/000-default.conf"

我以后怎么办附加到同一个文件?

if $enable_ssl; then
    echo "<VirtualHost *:443>
        ...
    </VirtualHost>" | sudo sed <opions-to-sed-here>
fi

答案1

>具有更高/不同权限的shell 的通常替代品是:

echo "replace file content with this line" | sudo tee protectedFile >/dev/null

如果您想附加,请使用-a

echo "append this line to file" | sudo tee -a protectedFile >/dev/null

答案2

没有echo

string=$'"<VirtualHost *:443> \
        ... \
    </VirtualHost>"'

sudo sed -i '$a\'"${string}"'' file

-i选项指示sed就地处理文件(可以选择在原始版本中添加后缀)。

sed 脚本:

  1. $匹配最后一行
  2. a\在匹配行后附加文本

但它不适用于空文件(因为不会有任何输入行与最后一行匹配)。

答案3

为了完整起见,如果您ed手头有:

echo "$
a
<VirtualHost *:80>
...
</VirtualHost>
.
w" | sudo ed protectedFile
  1. $转到最后一行
  2. a附加,后跟要附加的数据,以包含单个点的行结尾
  3. w代表写(文件)

前两个命令可以连接(产生$a),但这不适用于空文件 - 单独它会,因为这意味着“转到最后一行”(这是一个无操作),然后是“附加”而不是“附加到最后一行”,这实际上并不存在。

相关内容