我有这样的文字:
... - hi- 12-
我想要的输出是在字母数字值之间以-
结尾的空格:
... - hi - 12 -
请注意,第一个连字符停留在原处,因为它前面是空格-不是字母神经病。
multi-line
之类的单词也不得修改。
这是我正在使用的:
echo " - hi- 12-" | sed -E 's/[[:alnum:]]-($|[^[:alnum:]])/ &/g'
输出:
" - h i- 1 2-"
我可以使用&+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
占位符(或数字后向引用)是指用相应组捕获的文本。