我有文字:
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'
答案 0 :(得分:4)
传统的sed不支持正则表达式。您可以使用grep -oP
(带有PCRE标志)
s='abc abc Abc ABC AB_C'
grep -oP '([A-Z]+(_?[A-Z]+)+)' <<< "$s"
ABC
AB_C
答案 1 :(得分:1)
默认情况下sed
使用BRE。这意味着,你必须逃脱具有特殊含义的字符,如+ ( ...
。 “给予”他们特殊的意义。
如果您使用的是gnu sed,则可以使用-r
选项使sed使用ERE
。
希望这有用。
答案 2 :(得分:0)