为什么我的perl one衬里不工作?

时间:2011-09-02 00:23:14

标签: perl

我正在尝试从HTML日志文件中获取错误数量。这是我的代码(是的,我知道我正在混合使用bash和perl):

 for line in `cat paths.txt`; do   grep Failed ${line} | perl -pe 'm/\d+/'; done

我期望得到一个数字列表,例如

0 
1 
0 
0 
0 
1 
6

但我得到的是包含错误的整行,例如,

      Total Failed: <strong>0</strong>
      Total Failed: <strong>1</strong>
      Total Failed: <strong>0</strong>
      Total Failed: <strong>0</strong>
      Total Failed: <strong>0</strong>
      Total Failed: <strong>1</strong>
      Total Failed: <strong>6</strong>

我在看什么?

3 个答案:

答案 0 :(得分:6)

perl -pe 'm/\d+/';只需执行模式匹配,打印的行不会更改。如果您只想打印数字,则需要以下内容:

perl -pe 's/\D+//g'          # change $_

perl -nE 'say $1 if /(\d+)/' # only print the match

但为什么不使用所有perl?

perl -nwE 'say $1 if /Failed.*(\d+)/' paths.txt

答案 1 :(得分:2)

请尝试使用此代码:

perl -ne '/\d+/ && print "$&\n"'

答案 2 :(得分:1)

为什么不简单呢?

grep -o '[0-9]\+' paths.txt