首页 > 解决方案 > Bash,通过与 awk 保持匹配来获取子字符串

问题描述

如何使用 awk 拆分字符串但也打印匹配项?

完整的随机字符串:

aaa sasawf wewfTotemeswdwqewqwqtotemwewedew

我需要得到“wewftotemeswdwqewqwqtotemwewedew”,其中子字符串是随机的,唯一的常量是空格和其中的单词totem。当您注意到随机字符串可能包含多个图腾词时,我需要 awk 从第一个匹配项开始获取子字符串。需要明确的是,我需要“wewftotemeswdwqewqwqtotemwewedew”而不是“totemwewedew”。我还需要它不区分大小写

我可以awk -F ' .*totem' '{print$2}'用来打印eswdwqewqwqtotemwewedew,但我怎样才能打印比赛呢?

标签: bashawk

解决方案


使用 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[^ ]*/...

推荐阅读