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 capitalization。 variable1
这样的名字通常是安全的。
我想知道如何在 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 capitalization。variable1
这样的名字通常是安全的。