Muszę wyszukać słowo kluczowe za pomocą awk, ale chcę przeprowadzić wyszukiwanie bez rozróżniania wielkości liter (bez rozróżniania wielkości liter).
Myślę, że najlepszym podejściem jest pisanie wielkimi literami zarówno wyszukiwanego terminu („słowo kluczowe”), jak i linii docelowej, którą odczytuje awk w tym samym czasie. Z tego pytania , jak używać toupper
drukowania wielkimi literami, ale nie wiem, jak używać go w dopasowaniu, ponieważ ta odpowiedź pokazuje tylko drukowanie i nie pozostawia tekstu wielkiej litery w zmiennej.
Oto przykład, biorąc pod uwagę następujące dane wejściowe:
blablabla
&&&Key Word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&KEY WORD&&&
blablabla
Chciałbym ten wynik:
I want all
these text and numbers 123
and chars !"£$%&
as output
Oto, co mam, ale nie wiem, jak dodać toupper
:
awk "BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }" text.txt
źródło
awk 'toupper($0)~/&&&KEY WORD&&&/ { p = ! p ; next } ; p;' text.txt
.BEGIN
Blok nie jest potrzebny, a ponieważ domyślną czynnością jest drukowanie,p;
wystarczy.BEGIN
Blok nie jest potrzebny ”, ponieważ niezainicjowana zmienna ma wartość false.tolower
jest obecny na starożytnych (lub nie tak starożytnych) wersjach awk (np. AIX), aletoupper
nie zawsze jest dostępny ^^.gawk ma
IGNORECASE
wbudowaną zmienną, która, jeśli ustawiona na wartość niezerową, powoduje, że wszystkie porównania ciągów i wyrażeń regularnych nie uwzględniają wielkości liter. Możesz użyć tego:itp. Jest to jednak specyficzne
gawk
, ale uważam, że jest bardziej czytelne niż (bardziej przenośna) alternatywa autorstwa meuh. To, czy jest to problem, zależy oczywiście od Ciebie.źródło