如何用sed从配置文件中精准移除指定废弃参数?
解决sed命令误删整行的问题
我懂你的困扰——本来只想移除那些param开头的废弃参数,结果用sed -i 's/param.*//g' [file]直接把整行后半段全清了,这锅得甩给正则里的.*:它是贪婪匹配,会从第一个param开始,一路匹配到行的最后一个字符,自然把后面有用的opt1、opt2也一并删掉了。
要精准只移除param1=X、param2=Y这类参数,我们得调整正则,让它只匹配单个param开头的参数项,而不是一路薅到行尾。试试下面的命令:
sed -i 's/param[0-9]*=\S\+\s*//g' [file]
命令细节解释:
param[0-9]*:匹配以param开头、后面跟任意数字的参数名(比如param1、param4都能命中)=\S\+:匹配参数名后的=,以及后面的非空白字符(也就是参数值,比如X、T)\s*:匹配参数值后面的任意空格(包括多个空格或单个空格),确保移除参数后不会留下多余空格//g:全局替换,把所有符合条件的param参数都替换为空
如果你的param类参数名不一定是数字结尾(比如可能有param_abc这类),可以用更通用的版本:
sed -i 's/param[^=]\+=\S\+\s*//g' [file]
这里的[^=]\+会匹配param后面直到=之前的任意字符,能覆盖更多格式的废弃参数。
拿你的示例行测试:
PARAM='param1=X param2=Y param3=Z param4=T opt1=A opt2=B'
执行命令后会变成:
PARAM='opt1=A opt2=B'
完全符合你的需求~
内容的提问来源于stack exchange,提问作者Hưng Trần
相关产品推荐
相关产品推荐

