2016-10-17 2 views
1

je veux faire quelque chose d'aussi simple que:Échapper caractères spéciaux dans AWK

myregex = "A\?B" 

ou

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

Dans le premier exemple, je reçois ceci:

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

En le deuxième exemple, il ne correspond tout simplement pas aux lignes correspondantes.

J'utilise GAWK 3.1.6 sous Windows - il a obtenu de GnuWin32 package

Répondre

2

constantes de chaîne (par exemple "A\?B") sont scanned twice:

la première fois awk lit votre programme, et deuxième fois quand il va correspondre à la chaîne sur le côté gauche de l'opérateur avec le motif sur la droite.

La première barre oblique est mangée par le premier balayage, vous avez donc besoin d'échapper à la barre oblique inverse avec une autre barre oblique inverse, à savoir "A\\?B":

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

Cependant, comme il est dit dans the docs, il est généralement préférable à utiliser constantes regexp:

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

cela fonctionne très bien, excellente réponse, merci! – BearCode