如何使用SSH配合sed命令替换配置文件中的指定整行内容
问题根源
你当前使用的命令仅匹配了mystring =这个前缀,没有覆盖等号后的所有内容,所以只会替换前缀部分,原有等号后内容会保留,最终出现内容追加、多次执行重复拼接的问题。
解决方案
方案1:整行强制替换(固定最终行格式,无缩进)
直接匹配所有符合规则的行,整行替换为你需要的固定内容,不管原行是什么样,执行多少次结果都完全一致:
sed -i '/^[[:space:]]*mystring[[:space:]]*=/c\mystring = 1234' file.ini
命令逻辑说明:
- 前缀匹配规则
/^[[:space:]]*mystring[[:space:]]*=/兼容配置文件常见格式:可以匹配行首有空格/缩进、mystring和等号之间有任意空格的行 c\是sed的整行替换指令,会直接把匹配到的整行替换为后面指定的内容,完全覆盖原行所有内容
方案2:保留原行缩进的替换
如果你的配置文件有层级缩进,希望替换后保留原行的缩进格式,可以用分组捕获的写法:
sed -i 's/^\([[:space:]]*mystring[[:space:]]*=\).*/\1 1234/g' file.ini
命令逻辑说明:
- 正则第一部分
^\([[:space:]]*mystring[[:space:]]*=\)会捕获行首到等号的所有内容(包括行前缩进、mystring、等号前后的空格) - 后面的
.*匹配等号后的所有内容,替换时直接丢弃 \1引用前面捕获的前缀内容,拼接你需要的固定值,既保留原缩进格式,也不会出现内容追加问题
内容的提问来源于stack exchange,提问作者Santiago Martinez
相关产品推荐
相关产品推荐

