2016-10-17 3 views
1

möchte ich etwas so einfach tun, wie:Escaping von Sonderzeichen in AWK

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

In:

myregex = "A\?B" 

oder

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

Im ersten Beispiel, ich bin dies immer Im zweiten Beispiel stimmt es einfach nicht mit den entsprechenden Zeilen überein.

I GAWK 3.1.6 unter Windows verwendet - hätte es von gnuwin32 Paket

Antwort

2

String-Konstanten (wie "A\?B") sind scanned twice:

das erste Mal, wenn awk Ihr Programm liest und die zweites Mal, wenn es entspricht der Zeichenfolge auf der linken Seite des Bedieners mit das Muster auf der rechten Seite.

Der erste Schrägstrich wird von dem ersten Scan gegessen, so müssen Sie den umgekehrten Schrägstrich mit einem anderen Backslash entkommen, das heißt "A\\?B":

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

jedoch, wie es in the docs gesagt wird, ist es in der Regel besserregexp Konstanten zu verwenden:

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

es funktioniert sehr gut, große Antwort, danke! – BearCode