linux正则表达式匹配字符ß

时间:2013-06-17 14:43:44

标签: regex linux

我遇到了一些我在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

感谢您的帮助!

2 个答案:

答案 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:“字”字符(数字,字母数字和下划线)
      • 如果该awk版本不了解w特殊含义,则为\w
    • \s:一个空格(如果使用unicode,可能是很多东西,而不仅仅是空格和制表符)
      • 如果该awk版本不了解s特殊含义,则为\s
    • ((
    • {{
    • ))
    • }}
    • \r:换行
    • \n:新行
    • \[[
    • \]]
  • 第二个角色必须是:

    • ,,(逗号)。

最后一行不包含逗号。 (Beta会匹配,否则,因为它不是上面列表的一部分)