Linux: Extração de dados do arquivo de texto

1

Eu tenho um arquivo de texto no qual milhares de dados estão lá. por exemplo.

id=row_value
profile=row_value
name=row_value
email=row_value
address=row_value

id=row_value2
profile=row_value2
name=row_value2
email=row_value2
address=row_value2

.       .       .
.       .       .
.       .       .

Desejo extrair todos os name e email desse arquivo. por exemplo.

name=row_value
email=row_value

name=row_value2
email=row_value2

.       .       .
.       .       .
.       .       .

NOTA: Observe a nova linha após cada name e email pares.

Eu sei que isso será feito em alguns comandos do Linux como grep , sed , awk etc. Eu sou Noob em comandos linux e por favor me ajude com relação a isso ..

    
por Sohan Patel 07.08.2014 / 14:18

2 respostas

4

Tente isso

grep "name\|email" <Path to your File> 
    
por Ruediger 07.08.2014 / 14:28
0

Para manter a consciência limpa, aqui está uma versão awk :

$ awk '$0~/name/||/email/ {if ($0~/email/) $3="\n"; print $0}' testerfile.txt 
name=row_value
email=row_value  

name=row_value2
email=row_value2  

E este, vai acrescentar os pontos:

awk '$0~/name/||/email/ {if ($0~/email/) $3="\n"; print $0}; $0~/^.[[:blank:]].[[:blank:]]./ {print} ' testerfile.txt

Saída:

$awk '$0~/name/||/email/ {if ($0~/email/) $3="\n"; print $0}; $0~/^.[[:blank:]].[[:blank:]]./ {print} ' testerfile.txt 
name=row_value
email=row_value  

name=row_value2
email=row_value2  

.       .       .
.       .       .
.       .       .

Uma versão muito mais simples da primeira versão:

awk '/^name/; /^email/ {$3="\n"; print}' testerfile.txt

A regex ancorada impedirá a localização de palavras "nome" e "email" em outras partes do texto e apenas no início de uma linha

    
por Sergiy Kolodyazhnyy 15.06.2015 / 16:12