我想要
$ {test-value}(虽然我更喜欢测试值)
来自此表达式
echo 'test=${test-value} ... more text' | sed 's/\${[^}]*}/&/'
但它只打印输入
我想我是这样匹配的,
但显然我不是,或者我错过了其他的东西。
答案 0 :(得分:1)
您将${test-value}
与\${[^}]*}
匹配,但您将其替换为自身,因为替换模式中的&
代表整个匹配值。
如果要使用sed
(以匹配整个字符串但捕获所需内容并通过在替换模式中使用\1
占位符来保留它),请使用以下修复:
sed 's/.*\(\${[^}]*}\).*/\1/'
或使用匹配方法(grep
使用-o
选项提取匹配的文字):
grep -o '\${[^}]*}'
查看online demo。