我来翻译一下:
abc abc Abc ABC AB_C
我想匹配带有大写字母和连字符(这不是必须的)的单词。
我的解决方案是:
[A-Z]+(_{0,1}[A-Z]+)+
它可以在 regexpal.com 上工作,但不能在 sed
中工作。我做错了什么?
sed 's/\([A-Z]+(_{0,1}[A-Z]+)+\)/\1/g'
我来翻译一下:
abc abc Abc ABC AB_C
我想匹配带有大写字母和连字符(这不是必须的)的单词。
我的解决方案是:
[A-Z]+(_{0,1}[A-Z]+)+
它可以在 regexpal.com 上工作,但不能在 sed
中工作。我做错了什么?
sed 's/\([A-Z]+(_{0,1}[A-Z]+)+\)/\1/g'
grep -oP
。s='abc abc Abc ABC AB_C'
grep -oP '([A-Z]+(_?[A-Z]+)+)' <<< "$s"
ABC
AB_C
grep -o '\<[A-Z]\+\(_[A-Z]*\)*\>'
。我会使用 [[:upper:]]
代替 [A-Z]
。 - glenn jackman默认情况下,sed
使用 BRE。这意味着您必须转义具有特殊含义的字符,例如 + (...)
以使它们具有特殊含义。
如果您使用 GNU sed,则可以使用 -r
选项使 sed 使用 ERE
。
希望这对您有所帮助。