У меня есть текстовый файл, в котором есть тысячи данных. например,
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 и, пожалуйста, помогите мне в этом ..
Чтобы сохранить совесть чистой, вот версия 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
Якорное регулярное выражение предотвратит поиск слов «имя», и «электронная почта» в другом месте текста, и только в начале строки