web-dev-qa-db-fra.com

Linux: extraction de données à partir d'un fichier texte

J'ai un fichier texte dans lequel des milliers de données sont là. par exemple.

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

.       .       .
.       .       .
.       .       .

Je veux extraire toutes les name et email de ce fichier. par exemple.

name=row_value
email=row_value

name=row_value2
email=row_value2

.       .       .
.       .       .
.       .       .

REMARQUE: notez la nouvelle ligne après chaque paire name et email.

Je sais que cela sera fait dans certaines commandes linux telles que grep, sed, awk etc.

1
Sohan Patel

Essaye ça

grep "name\|email" <Path to your File> 
4
Ruediger

Pour garder la conscience pure, voici une version 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  

Et celui-ci, ajoutera les points:

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

Sortie:

$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  

.       .       .
.       .       .
.       .       .

Une version beaucoup plus simple de la première version:

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

Les expressions rationnelles ancrées empêcheront de trouver les mots "nom" et "email" ailleurs dans le texte, et uniquement au début d'une ligne.

0