como obter conteúdo dentro de um texto específico de um arquivo

3

Eu tenho um nome de arquivo demo.txt com o conteúdo da seguinte forma:

value -= [
 "02|05|06|abc",
]

/* Some other content other than value variable */

value -= [
]

value -= [
 "0698|06|07|abc",
]

Eu tenho muitas variáveis de valor neste arquivo demo.txt.

Eu quero imprimir apenas valores exclusivos, como abaixo, depois de ler o arquivo demo.txt

02| 05| 06| 0698| 07| abc

Eu tentei o seguinte:

awk '$0 == "value -= [" {i=1;next};i && i++ <= 1'

que me dá

"02|05|06|abc",
]
"0698|06|07|abc",

Mas eu não quero "]" e também não quero conteúdo repetido. Neste caso, o seu "06" e "abc"

Alguém pode sugerir?

    
por Kasino 22.07.2016 / 16:12

2 respostas

1
$ grep -oE '".*"' demo.txt | grep -oE '\w+' | sort -u
02
05
06
0698
07
abc
  • -o Imprime apenas as partes correspondentes (não vazias) de uma linha correspondente, com cada uma dessas partes em uma linha de saída separada
  • -E Interpretar PATTERN como uma expressão regular estendida
  • ".*" obtém todos os valores entre aspas
  • \w+ 1 ou mais de letras / dígitos / sublinhados
  • sort -u para obter valores únicos
por 22.07.2016 / 16:50
1

Esta é uma solução usando awk -v RS='' -F='"' -f script input_file

/value -= \[/ {
    split($0, data);
    count = split(data[2], values, "|");
    for (i = 1; i <= count; i++) {
        result[values[i]] = values[i];
    }
}

END {
    for (r in result) {
        printf r "|";
    }
    print "";
}

Isso também pode ser feito com sed :

sed -nr '/"/{s/[ "]//g;s/,/|/;G;s/\n//;x};${x; :a; s/([^|]+\|)(.*)//; ta; p}' input
    
por 22.07.2016 / 16:52