Bash 使用sed从配置文件中删除参数

Bash 使用sed从配置文件中删除参数,bash,sed,Bash,Sed,我正在尝试删除配置文件中同一行上的一些不推荐使用的参数。例如: PARAM='param1=X param2=Y param3=Z param4=T opt1=A opt2=B' 命令sed-i的/param.//g'[file] 将删除整条线,而不是预期的线(“仅限参数1,2,3”) 你能给我一些帮助吗 谢谢, 挂起如果要使用sed,以下内容可能会有所帮助 sed '/PARAM=/s/param[1-3]=[a-zA-Z] *//g' 或 这样做的目的如下: 如果行包含PARAM=(/

我正在尝试删除配置文件中同一行上的一些不推荐使用的参数。例如:

PARAM='param1=X param2=Y param3=Z param4=T opt1=A opt2=B'
命令sed-i的/param.//g'[file]

将删除整条线,而不是预期的线(“仅限参数1,2,3”)

你能给我一些帮助吗

谢谢,
挂起

如果要使用
sed
,以下内容可能会有所帮助

sed '/PARAM=/s/param[1-3]=[a-zA-Z] *//g'

这样做的目的如下:

  • 如果行包含
    PARAM=
    /PARAM=/
  • 然后将regex
    param[1-3]=[a-zA-Z]*
    替换为零(
    s/param[1-3]=[a-zA-Z]*//g
正则表达式的构建是为了匹配单个
param

这将产生:

$ echo PARAM=\'param1=X param2=Y param3=Z param4=T opt1=A opt2=B\' \
  | sed '/PARAM=/s/param[1-3]=[a-zA-Z] *//g'
PARAM='param4=T opt1=A opt2=B'
像这样的

cat test
PARAM='param1=X param2=Y param3=Z param4=T opt1=A opt2=B'
sed 's/param[1-3]=[^ ]*//ig' test
PARAM='   param4=T opt1=A opt2=B'

要保留最后一个
参数
和另一个
opt
s吗?是的,我只想删除param*并保留opt。此外,我不想像sed-i的/param1=X那样硬编码……你想删除所有的参数吗?您在问题中提到要删除参数1、2和3。这很有效。非常感谢你。不管怎样,你能给我解释一下为什么使用[^]*和“ig”(而不是只使用g)很高兴它奏效了i’是不区分大小写的。[^]*用于匹配“=”符号后的所有非空格字符(假设所有参数的值都不是常量)。
cat test
PARAM='param1=X param2=Y param3=Z param4=T opt1=A opt2=B'
sed 's/param[1-3]=[^ ]*//ig' test
PARAM='   param4=T opt1=A opt2=B'