bash 中的 Sed 替换

Sed replacement in bash

我想知道如何在 BASH 中轻松替换此变量:

VARIABLE1="VALUE2=somestring2 VALUE3=TRUE"

我只需要将 VALUE2=somestring2(这只是字符串的一部分)更改为替换它的新值:

我正在使用这个:

VARIABLE1="${VARIABLE1//VALUE2=[a-z0-9-]*/}VALUE2=${VALUE2}"

其中 VALUE2=${VALUE2} 是我在某行中指定的新值。

但是这里有两个问题:

1- 我覆盖 VALUE2=somestring2 的行从 VARIABLE1[=37 中删除 VALUE3=TRUE =]

2- 覆盖 VALUE2 后,它会在“VALUE2=somestring2”

的开头放置一个“space”

echo $VARIABLE1 “ VALUE2=somestring2”

有什么办法可以解决这个问题?

尝试

shopt -s extglob
VARIABLE1=${VARIABLE1/VALUE2=*([a-z0-9-])/VALUE2=$VALUE2}
  • shopt -s extglob 在 Bash 中打开扩展通配符。这使得(除其他外)built-in 替换机制能够使用一种正则表达式形式(此处为 *([a-z0-9-]))。请参阅 extglob section in glob - Greg's Wiki
  • 请注意 ALL_UPPERCASE 像 VARIABLE1 这样的变量名是有潜在危险的。它们可能会与现有的许多特殊 ALL_UPPERCASE 变量发生冲突。参见 Correct Bash and shell script variable capitalizationvariable1 这样的名字通常是安全的。