Bash:更新文件中的变量

时间:2014-08-12 15:46:55

标签: linux bash centos

我知道这是一个简单的答案,在漫步答案之前,我可能会继续在谷歌上挖掘。但我的时间紧迫,我希望得到一个简单的回应。

我需要在安装时更新ifcfg-eth0中的变量。换句话说,这就是需要发生的事情:

以下变量需要更改:

ONBOOT=no
BOOTPROTO=dhcp

ONBOOT=yes
BOOTPROTO=static

提前致谢!

干杯。

3 个答案:

答案 0 :(得分:3)

sed -i -e '/^ONBOOT=/s|.*|ONBOOT=yes|; /^BOOTPROTO=/s|.*|BOOTPROTO=static|' file

还可以尝试:

sed -i -re 's|^(ONBOOT=).*|\1yes|; s|^(BOOTPROTO=).*|\1static|' file

或者

sed -i -e 's|^\(ONBOOT=\).*|\1yes|; s|^\(BOOTPROTO=\).*|\1static|' file

答案 1 :(得分:3)

您可以使用这样的内容,它可以让您准确定义要在文件中添加的值:

$ bootproto="static"
$ sed -r "s/(BOOTPROTO\s*=\s*).*/\1$bootproto/" file
ONBOOT=no
BOOTPROTO=static

将两个人放在一起:

$ onboot="yes"
$ bootproto="static"
$ sed -r -e "s/(ONBOOT\s*=\s*).*/\1$onboot/" -e "s/(BOOTPROTO\s*=\s*).*/\1$bootproto/" file
ONBOOT=yes
BOOTPROTO=static

解释

  • (BOOTPROTO\s*=\s*).*捕获一组包含BOOTPROTO + any_number_of_spaces + = + any_number_of_spaces的文本。然后,匹配我们要删除的文本的其余部分。 \1$var将其与给定变量一起打印出来。
  • \s*保持当前空格不变,然后替换使用bash变量$bootproto更改当前文本的同一行。
  • -r用于抓取()而不是\(\)的群组。

要进行适当的编辑,请使用sed -i.bak。这将创建文件file.bak的备份,file将使用新内容进行更新。

所有在一起:

sed -ir -e "s/(ONBOOT\s*=\s*).*/\1$onboot/" -e "s/(BOOTPROTO\s*=\s*).*/\1$bootproto/" file

答案 2 :(得分:0)

sed

perl解决方案类似
perl -i.bak -pe 's/(ONBOOT)=no/$1=yes/;s/(BOOTPROTO)=dhcp/$1=static/' files....