通过shell脚本使用sed管理配置文件
我需要在Linux中使用shell脚本管理一个配置文件,该脚本将在通过shell脚本使用sed管理配置文件,shell,configuration,sed,read-write,Shell,Configuration,Sed,Read Write,我需要在Linux中使用shell脚本管理一个配置文件,该脚本将在cfg文件中读取和写入设置。我有以下函数在脚本中使用的现有配置文件中编写一个新的键的值 set_setting() { sed -i "s/$1=[^ ]*/$1=$2/" $3 } 用法: set\u设置keyname NewValue/home/Config.cfg 因此,这将把Config.cfg中的keyname值替换为NewValue 我还有一个函数get\u setting,它使用source命令读取配置文件
cfg
文件中读取和写入设置。我有以下函数在脚本中使用的现有配置文件中编写一个新的键的值
set_setting() {
sed -i "s/$1=[^ ]*/$1=$2/" $3
}
用法:
set\u设置keyname NewValue/home/Config.cfg
因此,这将把Config.cfg
中的keyname
值替换为NewValue
我还有一个函数get\u setting
,它使用source
命令读取配置文件。它同样接受两个参数,keyname
和源配置文件,并返回所提供密钥的值
现在的问题是,我有如下配置文件
name=Abc
surname=Xyz
当我将set_setting
函数调用为set_setting name Def/home/Config.cfg
时,理想情况下,它应该将name
的值从Abc
更改为Def
,但同时更改键name
的值,它还将姓氏
的值从Xyz
更改为Def
,从而在配置文件中显示以下内容
name=Def
surname=Def
我怀疑这是由于两个键中都有术语“name”,因为当我将键姓氏
更改为姓氏
时,它按预期工作,只更改了名称
的值。还要注意,键的值可以是除空格以外的任何值
我不熟悉shell脚本,最近发现了sed
命令
我还提到了一些问题和建议。虽然他们两人都很有帮助,但我还是被上述情况困扰着。你应该将比赛锚定到队伍的开头:
sed -i "s/^$1=[^ ]*/$1=$2/" $3
注意^
前面的$1
。这个正则表达式操作符将表达式锚定到行的开头,实际上要求名称包含从第一个字符到=
符号的所有内容。还有一个叫做$
的线端锚点(这里您不需要它)。我很愚蠢。:-)谢谢!