我有文字:
ABCABC 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
。
希望这是有帮助的。
您可以通过两种方式做到这一点:
-
使用 sed 过滤小写字母:
$ echo 'abc abc Abc ABC AB_C' | sed "s/s/n/g" | sed '/[a-z]/d' ABC AB_C
-
使用 grep 不使用 pcre:
$ echo 'abc abc Abc ABC AB_C' | sed "s/s/n/g" | grep "^[A-Z][A-Z_]*$" ABC AB_C