我如何像sed一样使用perl?

时间:2010-07-01 08:37:31

标签: perl

我有一个包含

等条目的文件
--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 个答案:

答案 0 :(得分:21)

作为一个单行:

perl -lne '/^--ERROR---.*Name="(.*?)" Age="(.*?)"/ && print "$1 $2"' file

答案 1 :(得分:17)

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

或内联替换:

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

答案 2 :(得分:6)

你的头衔不清楚。总之...

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

可以从stdin读取;当然,您可以将阅读循环更改为其他任何内容,并使用某些内容来打印哈希或根据您的需要填写任何内容。

答案 3 :(得分:5)

作为一个班轮,试试:

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

这很像使用sed,但使用Perl语法。

答案 4 :(得分:2)

“我如何使用像sed这样的perl?”的直接问题。最好用s2p回答,sed转换为perl转换器。给定命令行“sed $ script”,只需调用“s2p $ script”来生成(通常是不可读的)perl脚本,该脚本模拟给定命令集的sed。

答案 5 :(得分:-3)

参考评论:

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