SED - 1) 和 2) 之间有什么区别 - 为什么 2) 不匹配

SED - 1) 和 2) 之间有什么区别 - 为什么 2) 不匹配
  1. echo "123456xx111"| sed '{s/\([x]\)/{\1}/}'
    123456{x}x111
    
  2. echo "123456xx111"| sed '{s/\([x]+\)/{\1}/}'
    123456xx111
    

答案1

如果支持的话,Plus 需要一个反斜杠(它是一个 GNU 扩展):

echo "123456xx111"| sed '{s/\([x]\+\)/{\1}/}'
123456{xx}111

或者,切换到扩展正则表达式:

echo "123456xx111"| sed -E '{s/([x]+)/{\1}/}'
123456{xx}111

您可以大大简化您的表达式,因为外部{}不执行任何操作(并且在右大括号之前没有分号或换行符的某些 sed 实现中可能无法工作);单元素字符类相当于字符本身;当替换整个字符串时,您不必捕获任何内容:

echo "123456xx111"| sed -E 's/x+/{&}/'
123456{xx}111

或者,没有-E,没有任何 GNU 扩展(因此使用量词\{1,\}“一个或多个”):

echo "123456xx111"| sed 's/x\{1,\}/{&}/'
123456{xx}111

相关内容