Sed查找并替换带有空格的注释行,以便Ubuntu无人值守/自动重启

时间:2018-02-27 13:09:31

标签: bash shell

我在Ubuntu的无人值守升级文件/etc/apt/apt.conf.d/50unattended-upgrades中有一行,我试图完全换掉它:

// Unattended-Upgrade::Automatic-Reboot false;

到此:

Unattended-Upgrade::Automatic-Reboot true;

如果我像这样回应这条线,那就有效:

echo "// Unattended-Upgrade::Automatic-Reboot false;" | sed 's#// Unattended-Upgrade::Automatic-Reboot false;#Unattended-Upgrade::Automatic-Reboot true;#'

但是,如果我使用该文件就地执行相同的命令,则会失败:

sed -i.bak 's#// Unattended-Upgrade::Automatic-Reboot false;#Unattended-Upgrade::Automatic-Reboot true;#' /etc/apt/apt.conf.d/50unattended-upgrades

用于测试文件的示例数据:

// Automatically reboot *WITHOUT CONFIRMATION*
//  if the file /var/run/reboot-required is found after the upgrade
// Unattended-Upgrade::Automatic-Reboot "false";

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

这是我的白痴,正如@ArnoBozo所指出的那样。

我的echo示例在“false”和“true”中缺少引号,而文件本身的引号为“false”。

我不确定是否应该删除这个问题,因为它显然是一个愚蠢的错误。

答案 1 :(得分:0)

要反映文件中的更改,您必须执行以下操作:首先将输出重定向到临时文件,然后将其重命名为原始文件。这对我有用。

sed 's/\/\/ Unattended-Upgrade::Automatic-Reboot false/Unattended-Upgrade::Automatic-Reboot true/g' > /etc/apt/apt.conf.d/tmp.dat

mv /etc/apt/apt.conf.d/tmp.dat  /etc/apt/apt.conf.d/50unattended-upgrades