脚本将变量插入到配置文件中

时间:2013-07-15 15:04:43

标签: bash sed

作为post-preseeding脚本的一部分,我想禁用ipv6。

/etc/default/grub中,我想更改此行:

GRUB_CMDLINE_LINX=""

所以它写着:

GRUB_CMDLINE_LINUX="ipv6.disable=1"

可以通过以下方式完成:

sed -i "s/GRUB_CMDLINE_LINUX=\"\"/GRUB_CMDLINE_LINUX=\"ipv6.disable=1\"/" /etc/default/grub

但如果GRUB_CMDLINE_LINUX中已有参数,则sed将不匹配。

如何在保留任何现有参数(如果有)的同时添加参数?

1 个答案:

答案 0 :(得分:3)

问题是你正在整行。尝试

s/GRUB_CMD_LINE_LINUX=\"/GRUB_CMD_LINE_LINUX=\"ipv6.disable=1XXX/

将作业插入前面,并将XXX替换为用作分隔符的字符。也许 ;。可替代地

s/(GRUB_CMD_LINE_LINUX=[^\"]*)\"$/\1XXXipv6.disable=1"/

插入行尾。即在所有现有的参数之后。您可能必须转义括号和/或“在第二个版本中。

解决:

sed "s/GRUB_CMDLINE_LINUX=\"\(.*\)\"/GRUB_CMDLINE_LINUX=\"\1 ipv6.disable=1\"/" /etc/default/grub