2016-10-17 2 views
1

Я хочу сделать что-то просто:Экранирование специальных символов в AWK

myregex = "A\?B" 

или

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

В первом примере, я получаю это:

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

В второй пример, он просто не соответствует соответствующим строкам.

Я использую поглазеть 3.1.6 на Windows - получил его от gnuwin32 пакета

ответ

2

строковых констант (такие, как "A\?B") являются 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

Смежные вопросы