如何在Bash脚本中修改配置文件内的MY_CONFIG数组值?
如何用Bash脚本更新配置文件中的数组定义
嘿,这个需求其实用Bash里的sed工具就能轻松搞定,给你两种常用的方案,按需选择:
方案一:精准匹配旧数组内容替换
如果确定旧数组内容固定是['1','2','3'],可以直接精准匹配整行进行替换:
# 先备份配置文件,避免操作失误 cp your_config_file your_config_file.bak # 执行替换命令(Linux环境) sed -i 's/MY_CONFIG = \['\''1'\'',\''2'\'',\''3'\''\]/MY_CONFIG = \['\''4'\'',\''5'\''\]/g' your_config_file # 如果是macOS环境,sed的-i参数需要加空字符串 sed -i '' 's/MY_CONFIG = \['\''1'\'',\''2'\'',\''3'\''\]/MY_CONFIG = \['\''4'\'',\''5'\''\]/g' your_config_file
命令解释:
-i:直接修改原文件(不加的话只会输出到终端,不会改动原文件)s/旧内容/新内容/g:全局替换模式,g表示匹配到的所有符合条件的行都替换(如果你的配置里只有一行MY_CONFIG,g可以省略)- 单引号需要用
\'转义,因为Bash中单引号内部无法直接嵌套单引号
方案二:匹配行前缀灵活替换
如果不确定旧数组的具体内容,只想替换所有以MY_CONFIG = [开头的行,可以用更通用的写法:
# 备份文件 cp your_config_file your_config_file.bak # Linux环境 sed -i 's/^MY_CONFIG = \[.*\]/MY_CONFIG = \['\''4'\'',\''5'\''\]/' your_config_file # macOS环境 sed -i '' 's/^MY_CONFIG = \[.*\]/MY_CONFIG = \['\''4'\'',\''5'\''\]/' your_config_file
命令解释:
^MY_CONFIG = \[:匹配以MY_CONFIG = [开头的行.*:匹配任意字符(直到行尾的])- 这样不管旧数组里是什么内容,只要符合这个行格式,都会被替换成新的数组
['4','5']
注意事项
- 一定要先备份配置文件!避免替换出错导致配置损坏
- 如果你的配置文件中
MY_CONFIG行有多余的空格(比如MY_CONFIG = ['1','2','3']),可以把命令里的空格改成\s*来匹配任意空格,比如MY_CONFIG\s*=\s*\['1','2','3'\]
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

