/ / Usando o bash (bash awk, sed) lê um arquivo e extrai o prefixo de correspondência de palavras entre aspas - bash, scripting, sed, awk, grep

Usando o bash (bash awk, sed), leia um arquivo e extraia o prefixo de correspondência de palavras entre aspas - bash, scripting, sed, awk, grep

Eu tenho um arquivo contendo (um por linha). Eu gostaria de extrair a palavra entre aspas começando com o padrão algum. (no meu caso é C_)

"PATTERNabcde"  sdfds  sdfds
"sdfsdfsdf"   sdfdsf sdfdsf
" PATTERNabc"          dfdsdfd

e eu quero extrair: PATTERNabcde PATTERNabc

EDITAR:
Eu também gostaria de extrair a palavra entre aspas que não começam com o $PATTERN.

Respostas:

2 para resposta № 1

Você pode usar o awk:

awk -F" "$2~/^[[:space:]]*PATTERN/{print $2}" file

Isso funciona se houver apenas uma palavra entre aspas ou se a que começar com padrão for sempre a primeira; caso contrário, você teria que usar um ciclo:

awk -F" "{for (i=2;i<=NF;i+=2) if ($i ~/^[[:space:]]*PATTERN/ ) {print $i;next}}"

2 para resposta № 2
sed -rn "s/.*?".*?(PATTERN[^"]*)".*/1/p"
  • -r - regex estendido
  • -n - impressão automática desativada
  • .*? - zero ou mais caracteres, não gananciosos
  • ( - grupo de captura aberto
  • [^"] - qualquer personagem, mas "
  • ) - grupo de captura próximo
  • 1 - primeiro grupo correspondente
  • p - impressão

Nós apenas substituímos todas as linhas pelo primeiro grupo. Se houver uma substituição, nós imprimimos.


2 para resposta № 3

Você pode usar grep Como:

grep -Po "(?<=")s*PATTERN[^"]*(?=")" file

Veja