我目前正在使用sed
从stdin
.我在这个脚本中使用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 脚本:
$
匹配最后一行a\
在匹配行后附加文本
但它不适用于空文件(因为不会有任何输入行与最后一行匹配)。
答案3
为了完整起见,如果您ed
手头有:
echo "$
a
<VirtualHost *:80>
...
</VirtualHost>
.
w" | sudo ed protectedFile
$
转到最后一行a
附加,后跟要附加的数据,以包含单个点的行结尾w
代表写(文件)
前两个命令可以连接(产生$a
),但这不适用于空文件 - 单独它会,因为这意味着“转到最后一行”(这是一个无操作),然后是“附加”而不是“附加到最后一行”,这实际上并不存在。