
msoliver
(usa Debian)
Enviado em 15/07/2022 - 18:05h
XxJessicaxX escreveu:
Eu tenho um arquivo grande e nele eu preciso pegar alguma palavras seria oo nome, telefone do Aluno e não do Professor, nesse arquivo tem varios alunos eu necessito de todos:
dentro do arquivo contem
Aluno {
Nome = João 001
Endereco = rua do joao
Telefone = tel joao
cpf = xxx.xxx.xxx-xx
}
Aluno {
Nome = João 002
Endereco = rua do outro
Telefone = tel outro
cpf = xxx.xxx.xxx-xx
}
Professor {
Nome = Pedro
Endereco = rua do pedro
Telefone = tel pedro
cpf = xxx.xxx.xxx-xx
}
eu usei o grep mas não obtive êxito.
Boa tarde Jessica,
Segue sugestão:
awk 'BEGIN{RS="}\n";FS="\n";} $1~/Aluno/{printf "%s\n%s\n\n" ,$2,$4}' arquivo.txt
Nome = João 001
Telefone = tel joao
Nome = João 002
Telefone = tel outro
Setei o "awk", para entender que o "}\n", é o separador de registro,
Onde campo 1 casa com Aluno,
Printa campo 2 e 4 (Nome e Telefone)
---------------------------------------------------------------------------------------------------------------
Opção com o sed:
sed -nr '/Aluno/,/\}/{s/(Nome|Telefone) = //p}' arquivo.txt
"Casa" da linha que tem Aluno até a "}",
Nesse trecho 'casado', exclui
'Nome = '
'Telefone = '
printa só o que foi alterado.
----------------------------------------------------------------------------------------------------------------
grep
grep -E -A4 'Aluno' arquivo.txt|grep -E '^Nom|Tel'
Para 'excluir' "(Nome|Telefone) = "
grep -E -A4 'Aluno' arquivo.txt|grep -E '^Nom|Tel'|sed 's/^[[:alpha:]]\+ = //'
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________