在sed中匹配位置(&)后是否可以访问字符?

时间:2019-05-30 14:57:55

标签: regex sed

我有这样的文字:

... - hi- 12-

我想要的输出是在字母数字值之间以-结尾的空格:

... - hi - 12 -

请注意,第一个连字符停留在原处,因为它前面是空格-不是字母神经病。

multi-line之类的单词也不得修改。

这是我正在使用的

echo " - hi- 12-" | sed -E 's/[[:alnum:]]-($|[^[:alnum:]])/ &/g'

输出:

" - h i- 1 2-"

我可以使用&+1职位吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

sed -E 's/([[:alnum:]])-($|[^[:alnum:]])/\1 -\2/g' <<< " - hi- 12-"
#         ^-- Group1--^ ^-- Group 2 ---^

请参见online demo

详细信息

  • ([[:alnum:]])-捕获#1组:字母数字字符
  • --连字符
  • ($|[^[:alnum:]])-捕获组#2:字符串结尾或除字母数字外的任何字符。

在RHS(替换模式)中,\1\2占位符(或数字后向引用)是指用相应组捕获的文本。