我试图简单地在bash中执行正则表达式替换,但无法弄清楚。在我的测试中,我希望转换以下字符串: test_data(123) 至 test_xyz 我尝试了以下方法:
echo "test_data(123)" | sed -e 's/.*\(data(.*)\).*/xyz/g'
这让我:xyz
然后我尝试:
var=${"test_data(123)"//.*\(data(.*)\).*/xyz}
但是我收到一个错误-替换错误
我如何在bash中的正则表达式替换中获得所需的结果?
答案 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
。