Почему мой perl one liner не работает? - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь получить количество ошибок из файла журнала 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 ]

6 голосов
/ 02 сентября 2011

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
2 голосов
/ 02 сентября 2011

Попробуйте использовать это вместо:

perl -ne '/\d+/ && print "$&\n"'
1 голос
/ 02 сентября 2011

Почему бы не просто это?

grep -o '[0-9]\+' paths.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...