0

I have this string and need to extract the Name values from it (it-IT-SMTf00, ru-RU-SMTf00, en-GB-SMTf00 etc.):

[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]]]

Using regex101.com I can match the pattern I require using this regex pattern:

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

I am interested in group 1. The question is how do I do this using sed?

I have tried echo STRING | sed -re "s/.*Name: ([a-zA-Z0-9\-]+).*/\1/g" but this is greedy and only returns de-DE-SMTf00.

user3062572
  • 106
  • 1
  • 11
  • 1
    https://regex101.com/r/JzVkeV/2/ this pattern will capture what you want. now, i don't know exactly what do you want to do with sed. – lucas_7_94 Nov 04 '18 at 14:25
  • 1
    Use `grep -oP 'Name: *\K[a-zA-Z0-9-]+' your_file` – Wiktor Stribiżew Nov 04 '18 at 14:27
  • Thanks @lucas_7_94 that works but ideally wanted to be able to run it from command line, @Wiktor Stribiżew thanks that does the trick, if you write it as an answer I'll accept `echo STRING | grep -oP 'Name: *\K[a-zA-Z0-9-]+'` solved it for me :) – user3062572 Nov 04 '18 at 14:42

0 Answers0