regex - 当模式包含 "["时,字符串替换不起作用

标签 regex linux shell ash

我有以下字符串

str="aaa.bbb.1.ccc.[mmm]."

如果我用下面的命令进行替换,那么它就可以工作

# echo ${str/ccc.\[mmm\]./}
aaa.bbb.1.

现在我想把模式放到一个变量中,那么替换命令就不行了

# var="ccc.\[mmm\]."
# echo ${str/$var/}
aaa.bbb.1.ccc.[mmm].

# var="ccc.[mmm]."
# echo ${str/$var/}
aaa.bbb.1.ccc.[mmm].

如何使用变量中定义的模式进行替换?

最佳答案

将表达式放在双引号中:

echo "${str/$var/}"

在 busybox 上为我工作:

# str="aaa.bbb.1.ccc.[mmm]."
# echo ${str/ccc.\[mmm\]./}
aaa.bbb.1.
# var="ccc.\[mmm\]."
# echo ${str/$var/}
aaa.bbb.1.ccc.[mmm].
# echo "${str/$var/}"
aaa.bbb.1.
# ls -l /bin/sh
lrwxrwxrwx    1 root     root             7 May  9 05:22 /bin/sh -> busybox
#

关于regex - 当模式包含 "["时,字符串替换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30032931/

相关文章:

json - 遍历数组 : Cannot index array with string "<key>" 时出现 jq 错误

php - 从 PHP 脚本将用户添加到 Ubuntu 服务器

带有正则表达式的 Python lambda

linux - 如何为 UDP 连接选择以太网端口?

带有数字破折号的mysql正则表达式搜索字符串

linux - 如何让 XPlot 在 Linux/Mono 上工作?

c - 实现管道以模仿 Shell

java - 同时从多个线程调用 shell 脚本

javascript - 正则表达式检查所有数字是否相同

Java正则表达式删除所有尾随数字?