Linux: извлечение данных из текстового файла

У меня есть текстовый файл, в котором есть тысячи данных. например,

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

.       .       .
.       .       .
.       .       .

Я хочу извлечь из этого файла все name и email. например,

name=row_value
email=row_value

name=row_value2
email=row_value2

.       .       .
.       .       .
.       .       .

ПРИМЕЧАНИЕ. Обратите внимание на новую строку после каждой пары name и email ..

Я знаю, что это будет сделано в некоторых командах Linux, таких как grep, sed, awk и т. д. Я Noob в командах linux и, пожалуйста, помогите мне в этом ..

1
задан 7 August 2014 в 17:45

1 ответ

Чтобы сохранить совесть чистой, вот версия 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  

И этот, добавит точки:

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

Выход:

$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  

.       .       .
.       .       .
.       .       .

Более простая версия первой версии:

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

Якорное регулярное выражение предотвратит поиск слов «имя», и «электронная почта» в другом месте текста, и только в начале строки

0
ответ дан 24 May 2018 в 04:53

Другие вопросы по тегам:

Похожие вопросы: