2016-10-17 10 views
1

での特殊文字のエスケープ:で私はのような単純な何かをしたいAWK

warning: escape sequence '\?' treated as plain '?' 

:最初の例では

myregex = "A\?B" 

または

if (match($O, "A\?B")) print "YES" 
    else print "NO" 

を、私はこれを取得しています2番目の例では、単に対応する行に一致しません。

私はWindows上でGAWK 3.1.6を使用しています - gnuwin32パッケージからそれを得た(例えば"A\?B"など)

答えて

2

文字列定数はscanned twiceです:

awkがプログラムを読み込んで初めて、及びもう一度 と入力すると、オペレータの左端の文字列が の右側のパターンと一致するようになります。

最初のスラッシュは最初のスキャンで食べ、あなたが別のバックスラッシュでバックスラッシュをエスケープする必要があり、すなわち"A\\?B"さ:

if (match($0, "A\\?B")) print "YES"; else print "NO"; 

それはthe docsに言われているようしかし、それは通常優れています正規表現定数を使用する:

それは非常にうまく機能
if (match($0, /A\?B/)) print "YES"; else print "NO"; 
+0

、偉大な答えは、ありがとう! – BearCode

関連する問題