我遇到了一些我在Linux上看不到的东西。谁能告诉我为什么第一个正则表达式没有拿起“ß-胡萝卜素”?
$ cat cmpg
ß-Cyclopentyl-4-(7H-pyrrolo[2,3-d]pyrimidin-4-yl)-((3R)-1H-pyrazole-1-propanenitrile
ß-Cyclopentyl-4-(7H-pyrrolo[2,3-d]pyrimidin-4-yl)-((R)-1H-pyrazole-1-propanenitrile
ß-carotene
$ cat cmpg|awk '/[^\w\s({)}\r\n\[\]],/'
ß-Cyclopentyl-4-(7H-pyrrolo[2,3-d]pyrimidin-4-yl)-((3R)-1H-pyrazole-1-propanenitrile
ß-Cyclopentyl-4-(7H-pyrrolo[2,3-d]pyrimidin-4-yl)-((R)-1H-pyrazole-1-propanenitrile
cat cmpg|awk '/ß/'
ß-Cyclopentyl-4-(7H-pyrrolo[2,3-d]pyrimidin-4-yl)-((3R)-1H-pyrazole-1-propanenitrile
ß-Cyclopentyl-4-(7H-pyrrolo[2,3-d]pyrimidin-4-yl)-((R)-1H-pyrazole-1-propanenitrile
ß-carotene
感谢您的帮助!
答案 0 :(得分:8)
$ cat cmpg|awk '/[^\w\s({)}\r\n\[\]],/'
仅匹配包含至少一个逗号的行。
至于为什么被否定的字符类与2
匹配(因为\w
包含所有ASCII数字而使我感到困惑,因此[^\w...]
应该无法匹配2
):{ {1}}使用不知道awk
(或\w
)缩写的POSIX基本正则表达式。您需要使用\s
或[:alnum:]
代替。
总而言之,正则表达式在任何正则表达式中都是。你想用它做什么?
答案 1 :(得分:3)
$ cat cmpg|awk '/[^\w\s({)}\r\n\[\]],/'
查找包含2个字符的任何字符串:
第一个字符不是([^
):
\w
:“字”字符(数字,字母数字和下划线)
w
特殊含义,则为\w
\s
:一个空格(如果使用unicode,可能是很多东西,而不仅仅是空格和制表符)
s
特殊含义,则为\s
(
:(
{
:{
)
:)
}
:}
\r
:换行\n
:新行\[
:[
\]
:]
第二个角色必须是:
,
:,
(逗号)。最后一行不包含逗号。 (Beta会匹配,否则,因为它不是上面列表的一部分)