Ответ 1
Добавьте IGNORECASE = 1;
в начало вашей команды awk следующим образом:
bash-3.2$ echo "Create" | awk '/^create/;'
bash-3.2$ echo "Create" | awk 'IGNORECASE = 1;/^create/;'
Create
Следующая команда работает как ожидалось.
# some command | awk '/(\<^create\>|\<^alter\>|\<^drop\>)/,/;/'
create table todel1 (id int) max_rows=2
/*!*/;
alter table todel1 engine=InnoDB
/*!*/;
create database common
/*!*/;
create database rules
/*!*/;
Но он соответствует только нижнему регистру "create", "alter" и т.д. Я хочу использовать IGNORECASE-переключатель в выражении awk, чтобы он возвращал все экземпляры поискового запроса.
Добавьте IGNORECASE = 1;
в начало вашей команды awk следующим образом:
bash-3.2$ echo "Create" | awk '/^create/;'
bash-3.2$ echo "Create" | awk 'IGNORECASE = 1;/^create/;'
Create
Следующая строка выполняет тест OR вместо AND:
echo -e "Create\nAny text" | awk 'IGNORECASE = 1;/^create/;'
Create
Create
Any text
Специальное слово BEGIN решило проблему:
echo -e "Create\nAny text" | awk 'BEGIN{IGNORECASE = 1}/^create/;'
Create
Надеюсь, что это поможет.
Себастьен.
Другой вариант для тех, у кого есть старый awk, где флаг IGNORECASE бесполезен:
echo "CreAte" | awk '/^[Cc][Rr][Ee][Aa][Tt][Ee]/;'