Bash:更新文件中的variables

我知道这是一个简单的答案,我可以继续在Google上挖掘,然后我漫步整个答案。 但是我的时间很紧,希望能有一个轻松的回应。

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

以下variables需要从以下变化:

ONBOOT=no BOOTPROTO=dhcp 

 ONBOOT=yes BOOTPROTO=static 

提前致谢!

干杯。

 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 

你可以使用这样的东西,它可以让你准确地定义你想要添加到文件中的值:

 $ 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 

类似于sedperl

 perl -i.bak -pe 's/(ONBOOT)=no/$1=yes/;s/(BOOTPROTO)=dhcp/$1=static/' files....