2015-04-27 5 views
2

рассмотрим простой файл с именем test, содержащий следующий текст:Зачем мне нужно избегать скобок в константе строки awk?

abc(def) 

С awk, если бы я узнал, что это будет работать:

awk '$0 ~ "abc\(def\)"' test 

, но это не будет работать, если круглые скобки не являются должным образом спасся:

awk '$0 ~ "abc(def)"' test 

Опуская правую скобку, я получил эту ошибку:

awk: line 1: regular expression compile failed (missing ')') 
abc(def 

Не строка цитирует "" строковой константы в AWK? Почему () рассматривается как специальный символ регулярного выражения в строковой константе?

ответ

2

При взгляде на документации простака here, он говорит (курсив мой)

Regexp matching and non-matching are also very common expressions. The left operand of the ~ and !~ operators is a string. The right operand is either a constant regular expression enclosed in slashes (/regexp/), or any expression, whose string value is used as a dynamic regular expression (see section Using Dynamic Regexps).

Regexp константа создается при выполнении сценария и не может быть изменен во время запуска программы в то время как динамические регулярные выражения быть изменены сценарием.

+0

спасибо. Я не понимал, что мое понимание '' 'неточно. Я должен подумать об этом. – Naitree

+1

Это одна вещь, которую я узнал из некоторых ответов здесь: вы всегда должны проверять документацию, в основном это объясняется там, хотя я сначала не верил в это. – martin

+0

Правильно, по крайней мере теоретически. Но иногда трудно догадаться, какая часть вашего понимания не соответствует истине, и в этом случае вы несколько слепы, чтобы найти правильную часть документации. – Naitree

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