Bash, получить подстроку, сохраняя соответствие с awk - PullRequest
1 голос
/ 20 марта 2020

Как я могу разделить строку с помощью awk, но также распечатать совпадение?

Полная случайная строка:

aaa sasawf wewfTotemeswdwqewqwqtotemwewedew

Мне нужно получить "wewftotemeswdwqewqwqtotemwewedew", где подстрока случайная, единственная константа - это пробел и слово тотем в нем. Как вы заметили, случайная строка может содержать более одного слова-тотема, мне нужен awk, чтобы получить подстроку, начиная с первого совпадения. Чтобы было ясно, мне нужно «wewftotemeswdwqewqwqtotemwewedew», а не «totemwewedew». Мне также нужно, чтобы он не учитывал регистр

Я могу использовать awk -F ' .*totem' '{print$2}' для печати eswdwqewqwqtotemwewedew, но как я могу распечатать совпадение тоже?

1 Ответ

2 голосов
/ 20 марта 2020

С GNU awk для сопоставления третьего аргумента ():

$ echo 'aaa sasawf wewftotemeswdwqewqwq' |
    awk 'match($0,/[^ ]*totem[^ ]*/,a) { print a[0] }'
wewftotemeswdwqewqwq

и с любым awk:

$ echo 'aaa sasawf wewftotemeswdwqewqwq' |
    awk 'match($0,/[^ ]*totem[^ ]*/) { print substr($0,RSTART,RLENGTH) }'
wewftotemeswdwqewqwq

Для сопоставления без учета регистра с GNU awk:

awk -v IGNORECASE=1 'match($0,/[^ ]*totem[^ ]*/...

и с любым awk:

awk 'match(tolower($0),/[^ ]*totem[^ ]*/...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...