Extrai múltiplas ocorrências na mesma linha de uma string entre dois delimitadores

1

Este é complicado ... a entrada tem várias ocorrências por linha em várias linhas. muitas linhas "id=" existem, mas eu só quero aquelas começando com ai-c "id="

Exemplo de entrada (duas linhas longas):

d-fl ai-c" id="3af3a73f26a63a-list-" lima zulu bravo hotel d-fl ai-c" id="7ab8273f273e7273f82c2-list-" alpha id="8372364fa2361ab1-list-" hotel foxtrox mike d-fl ai-c" id="973a72b72c72df12a2-list-" uniform hotel

início da segunda linha de golfe novembro d-fl ai-c "id=" 83hd826ab712cc71-list- "microfone bravo mike d-fl ai-c" id="7612364bab72a-list-" golf mike

A saída desejada é:

id="3af3a73f26a63a"

id="7ab8273f273e7273f82c2"

id="973a72b72c72df12a2"

id="83hd826ab712cc71"

id="7612364bab72a"

Todos os exemplos de script que vi parecem funcionar apenas para a primeira ocorrência em uma linha.

    
por CanRegExtoSaveMyLife 07.08.2018 / 05:30

2 respostas

1

Uma maneira de fazer isso é:

grep -oP '\hai-c"\h\Kid="[^-]*'  input.file | sed -e 's/$/"/'

Onde usamos GNU grep com o recurso Perl ativado e a opção -o para gerar apenas a (s) matche (s), em vez da linha inteira padrão quando uma correspondência é encontrada.

Saída:

id="3af3a73f26a63a"
id="7ab8273f273e7273f82c2"
id="973a72b72c72df12a2"
id="83hd826ab712cc71"
id="7612364bab72a"
    
por 07.08.2018 / 05:48
0

Outra maneira:

sed ' s/d-fl ai-c" /\n/g; s/-/"\n/g; :L; /^id=/ P; D; bL; ' file
id="3af3a73f26a63a"
id="7ab8273f273e7273f82c2"
id="973a72b72c72df12a2"
id="83hd826ab712cc71"
id="7612364bab72a"
    
por 07.08.2018 / 10:38