Мне нужно найти ключевое слово с помощью awk, но я хочу выполнить поиск без учета регистра (без учета регистра).
Я думаю, что лучший подход состоит в том, чтобы использовать как поисковый термин («ключевое слово»), так и целевую строку, которую awk читает одновременно. Из этого вопроса я toupper
узнаю, как использовать для печати все прописные буквы, но я не знаю, как использовать его в совпадении, потому что этот ответ просто показывает печать и не оставляет заглавный текст в переменной.
Вот пример, учитывая этот вход:
blablabla
&&&Key Word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&KEY WORD&&&
blablabla
Я хотел бы этот вывод:
I want all
these text and numbers 123
and chars !"£$%&
as output
Это то, что у меня есть, но я не знаю, как добавить в toupper
:
awk "BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }" text.txt
источник
awk 'toupper($0)~/&&&KEY WORD&&&/ { p = ! p ; next } ; p;' text.txt
. Нет необходимости вBEGIN
блоке, и, поскольку действие по умолчанию - печать,p;
достаточно.BEGIN
блоке», поскольку неинициализированная переменная оценивается как ложная.tolower
присутствует в древних (или не очень древних) системах awk-версий (например, AIX), ноtoupper
не всегда доступно ^^.У gawk есть
IGNORECASE
встроенная переменная, которая, если она не равна нулю, делает все сравнения строк и регулярных выражений нечувствительными к регистру. Вы можете использовать это:и т. д. Это характерно для
gawk
, хотя, но я считаю, что он более читабелен, чем (более переносимая) альтернатива от meuh Разве это проблема, конечно, полностью зависит от вас.источник