Linux Bash:更新文件中的变量

Linux Bash:更新文件中的变量,linux,bash,centos,Linux,Bash,Centos,我知道这是一个简单的答案,在我漫步于答案之前,我可能会继续在谷歌上搜索。但我的日程安排很紧,我希望得到一个简单的答复 我需要在安装时更新ifcfg-eth0中的一个变量。换句话说,这就是需要发生的事情: 以下变量需要从更改为: ONBOOT=no BOOTPROTO=dhcp 到 提前谢谢 干杯 sed -i -e '/^ONBOOT=/s|.*|ONBOOT=yes|; /^BOOTPROTO=/s|.*|BOOTPROTO=static|' file 还可以尝试: sed -i -re

我知道这是一个简单的答案,在我漫步于答案之前,我可能会继续在谷歌上搜索。但我的日程安排很紧,我希望得到一个简单的答复

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

以下变量需要从更改为:

ONBOOT=no
BOOTPROTO=dhcp

提前谢谢

干杯

sed -i -e '/^ONBOOT=/s|.*|ONBOOT=yes|; /^BOOTPROTO=/s|.*|BOOTPROTO=static|' file
还可以尝试:

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

还可以尝试:

sed -i -re '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
sed -ir -e "s/(ONBOOT\s*=\s*).*/\1$onboot/" -e "s/(BOOTPROTO\s*=\s*).*/\1$bootproto/" file
解释
  • (BOOTPROTO\s*=\s*).
    捕获一组文本,其中包含
    BOOTPROTO
    +任意数量的空格+
    =
    +任意数量的空格。然后,匹配我们要删除的文本的其余部分
    \1$var
    将其与给定变量一起打印回来
  • \s*
    保持当前空格不变,然后用bash变量
    $bootproto
    替换更改当前文本的同一行
  • -r
    用于捕获具有
    ()
    的组,而不是
    \(
    \)

要使其就地编辑,请使用
sed-i.bak
。这将创建文件的备份,
file.bak
文件
将用新内容更新

总而言之:

$ 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
sed -ir -e "s/(ONBOOT\s*=\s*).*/\1$onboot/" -e "s/(BOOTPROTO\s*=\s*).*/\1$bootproto/" 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
sed -ir -e "s/(ONBOOT\s*=\s*).*/\1$onboot/" -e "s/(BOOTPROTO\s*=\s*).*/\1$bootproto/" file
解释
  • (BOOTPROTO\s*=\s*).
    捕获一组文本,其中包含
    BOOTPROTO
    +任意数量的空格+
    =
    +任意数量的空格。然后,匹配我们要删除的文本的其余部分
    \1$var
    将其与给定变量一起打印回来
  • \s*
    保持当前空格不变,然后用bash变量
    $bootproto
    替换更改当前文本的同一行
  • -r
    用于捕获具有
    ()
    的组,而不是
    \(
    \)

要使其就地编辑,请使用
sed-i.bak
。这将创建文件的备份,
file.bak
文件
将用新内容更新

总而言之:

$ 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
sed -ir -e "s/(ONBOOT\s*=\s*).*/\1$onboot/" -e "s/(BOOTPROTO\s*=\s*).*/\1$bootproto/" file

sed
solutions和
perl

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

sed
solutions和
perl

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

感谢您的洞察力和解释。我已经看到了第一个回答,并将其标记为答案,但还是为之欢呼。@Chris读到这一点很好。如果你能从我的回答中学到一些东西,我会非常满足。谢谢你的洞察力和解释。我已经看到了第一个回答,并将其标记为答案,但还是为之欢呼。@Chris读到这一点很好。如果你能从我的回答中学到一些东西,我会非常满足。干杯