sed和捕获

时间:2018-02-11 14:02:35

标签: regex sed

我想要

$ {test-value}(虽然我更喜欢测试值)

来自此表达式

echo 'test=${test-value} ... more text' | sed 's/\${[^}]*}/&/'

但它只打印输入

我想我是这样匹配的,

  1. $
  2. {
  3. 零个或多个字符不是}
  4. }
  5. 但显然我不是,或者我错过了其他的东西。

1 个答案:

答案 0 :(得分:1)

您将${test-value}\${[^}]*}匹配,但您将其替换为自身,因为替换模式中的&代表整个匹配值。

如果要使用sed(以匹配整个字符串但捕获所需内容并通过在替换模式中使用\1占位符来保留它),请使用以下修复:

sed 's/.*\(\${[^}]*}\).*/\1/'

或使用匹配方法(grep使用-o选项提取匹配的文字):

grep -o '\${[^}]*}'

查看online demo