Sed 大写字母在正则表达式组中不起作用



我有文字:

ABC

ABC AB_C

我想用大写字母和破折号匹配单词(这不是强制性的)。

我的解决方案是:

[A-Z]+(_{0,1}[A-Z]+)+

它适用于 regexpal.com 但不适用于sed.我做错了什么?

sed 's/([A-Z]+(_{0,1}[A-Z]+)+)/1/g'

传统 sed 不支持该正则表达式。您可以使用grep -oP(带有 PCRE 标志)

s='abc abc Abc ABC AB_C'
grep -oP '([A-Z]+(_?[A-Z]+)+)' <<< "$s"
ABC
AB_C

默认情况下sed使用BRE。 这意味着,您必须转义具有特殊含义的字符,例如+ ( ... .以"赋予"它们特殊含义。

如果您使用的是 GNU sed,您可以使用-r选项使 sed 使用 ERE

希望这是有帮助的。

您可以通过两种方式做到这一点:

  1. 使用 sed 过滤小写字母:

    $ echo 'abc abc Abc ABC AB_C' | sed "s/s/n/g" | sed '/[a-z]/d' 
    ABC
    AB_C
    
  2. 使用 grep 不使用 pcre:

    $ echo 'abc abc Abc ABC AB_C' | sed "s/s/n/g" | grep "^[A-Z][A-Z_]*$"
    ABC
    AB_C
    

相关内容

最新更新