Perl System Grep and Paste - PullRequest
       10

Perl System Grep and Paste

0 голосов
/ 26 сентября 2019

У меня есть файл, который выглядит так:

Собака
Бульдог
Терьер

Кошка
Персидский

Обезьяна
Горилла

Собака
Питбуль
Лаборатория
Шепард
Хаски

Я хочу иметь возможность искать каждую строку, содержащую собаку, и выбирать все доследующую пустую строку и поместите ее в новый файл.

Мне нужен выходной файл, например:

Собака
Бульдог
Терьер

Собака
Pitbull
Lab
Shepard
Husky

Я знаю, что могу использовать grep, чтобы найти слово «собака», но как я могу его использовать, или с чем я могу его использовать, так что он захватывает все после него ДО следующей пустой строки и перемещает его в другой файл.

Я пишу скрипт на Perl, чтобы сделать это, потому что есть и другие вещи, которые я хотел бы добавить, которые упрощаются с помощью Perl.Я собирался использовать system(grep....), чтобы найти слово, но я не был уверен, что делать после этого.

Я также отмечу, что хочу сделать это рекурсивно.У меня есть много файлов, которые выглядят так, как я показал, и я хотел бы извлечь блок Dog из всех них.Так что это будет что-то рекурсивное из каталога.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

perl -ne 'print if /^Dog/../^$/' file

Операторы .. и ... в perl могут объединять два условия.Со времени, когда первый оценивает true, пока второе условное не оценивает true, объединенное условное выражение будет оценивать true.Таким образом, вы хотите print со времени, когда $_ =~ m/^Dog/ истинно, до $_ =~ m/^\s+$/ верно.Вышесказанное является сокращением для этого.

Различие между .. против ... здесь не важно, поскольку оба эти условия не могут быть истинными на одной и той же строке.

1 голос
/ 26 сентября 2019

ЕСЛИ вы можете использовать awk, то это можно сделать.При нулевом значении Record Selector awk работает в режиме блокировки.Проверьте, начинается ли блок с dog, и если да, выполните действие по умолчанию, распечатайте блок.

awk '/^Dog/' ORS="\n\n" RS="" file
Dog
Bulldog
Terrier

Dog
Pitbull
Lab
Shepard
Husky
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...