Replace/remove Bash 字符串中的文字方括号
Replace/remove literal square brackets in Bash string
我正在寻找消除 Bash 字符串中方括号的解决方案。
例如,考虑字符串:
ldr r3, [r0,#8]!
但是我不确定如何消除“[”和“]”。我想以最优雅的方式消除所有符号,例如:
str="ldr r3, [r0,#8]!"
echo ${str//[,.!]/}
但包含方括号。如何做到这一点?
使用
echo "${str//[][,.!]}"
因为 []
不是一个有用的模式,当 ]
是列出的 第一个 字符时,它被视为括号表达式的一部分。括号表达式不能嵌套,所以对[
.
没有限制
您也可以简单地转义 ]
:
echo "${str//[[\],.!]}"
另一个干净的解决方案是 tr:
tr: Translate, squeeze, and/or delete characters from standard input, writing to standard output.
哪里
-d, --delete delete characters in SET1, do not translate
以你为例:
str="ldr r3, [r0,#8]!"
echo $str | tr -d "[]"
输出是:
ldr r3, r0,#8!
我正在寻找消除 Bash 字符串中方括号的解决方案。 例如,考虑字符串:
ldr r3, [r0,#8]!
但是我不确定如何消除“[”和“]”。我想以最优雅的方式消除所有符号,例如:
str="ldr r3, [r0,#8]!"
echo ${str//[,.!]/}
但包含方括号。如何做到这一点?
使用
echo "${str//[][,.!]}"
因为 []
不是一个有用的模式,当 ]
是列出的 第一个 字符时,它被视为括号表达式的一部分。括号表达式不能嵌套,所以对[
.
您也可以简单地转义 ]
:
echo "${str//[[\],.!]}"
另一个干净的解决方案是 tr:
tr: Translate, squeeze, and/or delete characters from standard input, writing to standard output.
哪里
-d, --delete delete characters in SET1, do not translate
以你为例:
str="ldr r3, [r0,#8]!"
echo $str | tr -d "[]"
输出是:
ldr r3, r0,#8!