4

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

助けてくれてありがとう!

4

2 に答える 2

8
$ cat cmpg|awk  '/[^\w\s({)}\r\n\[\]],/'

少なくとも 1 つのカンマを含む行のみに一致します。

否定された文字クラスが に一致する理由(すべての ASCII 数字が含まれ2ているため、私を困惑させたので、一致に失敗するはずです)については、 (または ) 短縮形を知らない POSIX 基本正規表現を使用します。代わりにorを使用する必要があります。\w[^\w...]2awk\w\s[:alnum:][:space:]

全体として、その正規表現どの正規表現フレーバーでも奇妙です。それを使って何を達成しようとしていますか?

于 2013-06-17T14:48:28.417 に答える
3
$ cat cmpg|awk  '/[^\w\s({)}\r\n\[\]],/'

2文字の文字列を探します:

  • 最初の文字は ( [^) であってはなりません:

    • \w: 「単語」文字 (数字、英数字、アンダースコア)
      • または、その awk バージョンが特別な意味をw認識していない場合はリテラル\w
    • \s:空白(スペースとタブだけでなく、Unicodeを使用している場合は多くのものになる可能性があります)
      • または、その awk バージョンが特別な意味をs認識していない場合はリテラル\s
    • ( : あ(
    • { : あ{
    • ) : あ)
    • } : あ}
    • \r: 改行
    • \n: 改行
    • \[: あ[
    • \]: あ]
  • 2 番目の文字は :

    • ,: a ,(コンマ)。

最後の行にはコンマが含まれていません。(ベータ版は上記のリストの一部ではないため、そうでなければ一致します)

于 2013-06-17T15:01:04.217 に答える