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 № 1Você 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óximo1
- primeiro grupo correspondentep
- 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