Как мне использовать Perl как Sed? - PullRequest
4 голосов
/ 01 июля 2010

У меня есть файл, в котором есть записи типа

--ERROR--- Failed to execute the command with employee Name="shayam" Age="34"

--Successfully executed the command with employee Name="ram" Age="55"

--ERROR--- Failed to execute the command with employee Name="sam" Age="23"

--ERROR--- Failed to execute the command with employee Name="yam" Age="3"

Я должен извлечь только Имя и Возраст тех, для кого не удалось выполнить команду. в этом случае мне нужно извлечь shayam 34 sam 23 yam 3. Мне нужно сделать это в perl. большое спасибо ..

Ответы [ 6 ]

22 голосов
/ 01 июля 2010

В качестве однострочника:

perl -lne '/^--ERROR---.*Name="(.*?)" Age="(.*?)"/ && print "$1 $2"' file
17 голосов
/ 07 июня 2016

файл perl -p -e 's /../../ g'

или для внутренней замены:

perl -pi -e 's /../ ../ g 'file

6 голосов
/ 01 июля 2010

Ваш заголовок не совсем понятен.Во всяком случае ...

while(<>) {
 next if !/^--ERROR/;
 /Name="([^"]+)"\s+Age="([^"]+)"/;
 print $1, "  ", $2, "\n";
}

может сделать это чтение из стандартного ввода;конечно, вы можете изменить цикл чтения на что-нибудь еще и распечатать что-нибудь, чтобы заполнить хэш или что-то еще в соответствии с вашими потребностями.

5 голосов
/ 01 июля 2010

В качестве одной строки попробуйте:

perl -ne 'print "$1 $2\n" if /^--ERROR/ && /Name="(.*?)"\s+Age="(.*?)"/;'

Это очень похоже на использование sed, но с синтаксисом Perl.

2 голосов
/ 02 июля 2010

Непосредственный вопрос "как мне использовать perl как sed?" лучше всего ответить с s2p, конвертер sed в perl. Учитывая командную строку «sed $ script», просто вызовите «s2p $ script» для генерации (обычно нечитаемого) perl-скрипта, который эмулирует sed для данного набора команд.

0 голосов
/ 01 июля 2010

См. Комментарии:

my @a = <>; # Reading entire file into an array
chomp @a;   # Removing extra spaces
@a = grep {/ERROR/} @a; # Removing lines that do not contain ERROR
# mapping with sed-like regexp to keep only names and ages :
@a = map {s/^.*Name=\"([a-z]+)\" Age=\"([0-9]+)\".*$/$1 $2/; $_} @a; 
print join " ",@a; # print of array content
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...