使用sed用括号替换百分号

时间:2015-12-07 19:39:47

标签: bash shell sed

我需要用括号替换百分号所包围的文本,例如:

  

此百分比是%a%test%

应该成为

  

这是{test}

我试过:sed的/ \%([^]] *)\%/ {\ 1} / g'

但结果是:

  

这是{是%a%test}

2 个答案:

答案 0 :(得分:2)

试试这个:

$ echo "This %is% a %test%" | sed -e 's/%\([^%]*\)%/{\1}/g'
This {is} a {test}
  • 你需要逃离群组:\(...\)(否则你会得到invalid reference \1 on 's' command's RHS
  • 使用[^%]*匹配除%
  • 之外的任何内容
  • 您无需转义%(但它也适用于\%)。

答案 1 :(得分:1)

我建议改为使用awk

s='This %is% a %test%'
awk -F'%' '{for (i=1; i<NF; i++) p = p $i (i%2 ? "{" : "}"); print p $NF}' <<< "$s"
This {is} a {test}