首页 > 解决方案 > 使用 sed 匹配同一行中的多个模式

问题描述

我有这个字符串,需要从中提取名称值(it-IT-SMTf00, ru-RU-SMTf00, en-GB-SMTf00等):

[Voice[Name: it-IT-SMTf00, locale: ita_ITA_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]], Voice[Name: ru-RU-SMTf00, locale: rus_RUS_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]], Voice[Name: en-GB-SMTf00, locale: eng_GBR_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]], Voice[Name: pt-BR-SMTf00, locale: por_BRA_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]], Voice[Name: es-MX-SMTf00, locale: spa_MEX_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]], Voice[Name: en-US-SMTf00, locale: eng_USA_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]], Voice[Name: fr-FR-SMTf00, locale: fra_FRA_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]], Voice[Name: es-ES-SMTf00, locale: spa_ESP_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]], Voice[Name: de-DE-SMTf00, locale: deu_DEU_f00, quality: 300, latency: 300, requiresNetwork: false, features: [version=201709251, name=NA, pairedVariant=F01, gender=female]]]

使用regex101.com我可以匹配我需要使用此正则表达式模式的模式:

Name: ([a-zA-Z0-9\-]+)

我对第 1 组感兴趣。问题是我如何使用 sed 做到这一点?

我试过echo STRING | sed -re "s/.*Name: ([a-zA-Z0-9\-]+).*/\1/g"了,但这是贪婪的,只会返回de-DE-SMTf00

标签: regexsedregex-groupregex-greedy

解决方案


推荐阅读