正则表达式在sed中替换子串

时间:2016-05-12 21:43:34

标签: regex sed

我在这里获得正确的输出时遇到了一些麻烦。

我有这个示例文本

test {
  abc: rem(1px);
  def: rem(2px) rem(3px);
}

这个当前的sed命令

sed -lE "s/rem\((.*)\)/\1/g" test.css

但我的输出看起来像这样

test {
  abc: 1px;
  def: 2px) rem(3px;
}

我的目标是这个

test {
  abc: 1px;
  def: 2px 3px;
}

1 个答案:

答案 0 :(得分:3)

使用

sed -lE "s/rem\(([^()]*)\)/\1/g" test.css

删除所有个人rem()[^()]括号表达式(如果我们使用POSIX术语)匹配除()之外的任何字符。

模式详细信息

  • rem\( - 匹配文字rem(
  • ([^()]*) - 第1组匹配()以外的0个或更多字符
  • \) - 文字)

\1在替换后恢复生成的字符串中的捕获文本。