与sed一起使用的正则表达式未获得$ {var // search / replace}的认可

时间:2018-07-13 19:46:53

标签: regex bash

我试图简单地在bash中执行正则表达式替换,但无法弄清楚。在我的测试中,我希望转换以下字符串: test_data(123) 至 test_xyz 我尝试了以下方法:

 echo "test_data(123)" | sed -e 's/.*\(data(.*)\).*/xyz/g'

这让我:xyz

然后我尝试:

var=${"test_data(123)"//.*\(data(.*)\).*/xyz}

但是我收到一个错误-替换错误

我如何在bash中的正则表达式替换中获得所需的结果?

1 个答案:

答案 0 :(得分:2)

${foo//$match/$replace}使用fnmatch(球形样式)模式,而不与BRE / ERE / PCRE或其他常规正则表达式语法格式兼容。

input="test_data(123)"
match='data(*)'
replace='xyz'

result=${input//$match/$replace}
echo "$result"

...正确发出test_xyz