Это немного поздно, но в двух ответах здесь (включая принятый ответ) упоминается выполнение awk 'IGNORECASE=1;...'
, то есть установка IGNORECASE=1
в качестве условия вместо оператора в блоке.
Это должноне будет сделаноОн устанавливает переменную как задумано, но также (как непреднамеренно) оценивает ее как логическое выражение, возвращая true.
Истинное условие без блока приведет к тому, что строка будет всегда печататься.Если он соответствует следующему шаблону, он также будет напечатан во второй раз.
То, что, вероятно, означал принятый ответ, было awk '{IGNORECASE=1} ...'
, которое устанавливает переменную IGNORECASE
в каждой строке текста.Это можно улучшить, используя условие BEGIN
, чтобы назначить его только один раз.Но более чистое решение - использовать флаг -v
для установки параметра вне логики скрипта:
awk -v IGNORECASE=1 '/(\<^create\>|\<^alter\>|\<^drop\>)/, /;/'
Обратите внимание, что IGNORECASE
относится к gawk.Для не специфичного для gawk метода в руководстве пользователя GNU Awk предлагается использовать tolower
в сопоставлении с образцом:
awk '(tolower($0) ~ /(\<^create\>|\<^alter\>|\<^drop\>)/), /;/'