Как я могу перейти от sed к Perl в командной строке? - PullRequest
0 голосов
/ 27 января 2010

Мне нужно найти фразу в нескольких файлах и отобразить результаты на экране.

grep "EMS" SCALE_*
| sed -e "s/SCALE_//" -e
"s/_main_.*log:/ /" 

Поскольку я не знаком с sed, я изменяю ее на Perl для удобства использования.

grep "EMS" SCALE_*
| perl -e "s/SCALE_//" -e
"s/_main_.*log:/ /"

или

grep "EMS" SCALE_*
| perl -e "s/SCALE_//; s/_main_.*log:/ /"  

Однако последний компилируется, но ничего не возвращает в командной строке.Любое предложение по модификации моего кода.Большое спасибо!

Ответы [ 3 ]

8 голосов
/ 27 января 2010

Чтобы использовать perl в стиле sed, вы должны попробовать флаг -p:

perl -p -e "s/SCALE_//;" -e "s/_main_.*log:/ /;"

Из объяснения в perlrun:

-p

заставляет Perl выполнять следующий цикл вокруг вашей программы, что заставляет его перебирать аргументы имени файла, что-то вроде sed:

LINE:
  while (<>) {
    ...             # your program goes here
  } continue {
    print or die "-p destination: $!\n";
  }
3 голосов
/ 27 января 2010

Вы не перебираете строки ввода с помощью perl. Проверьте -p или -n на странице руководства perlrun.

2 голосов
/ 27 января 2010

, если вы хотите использовать Perl, попробуйте это полностью в Perl

while ( <> ){
    chomp;
    if ( $_ =~ /EMS/ ){
        s/SCALE_//g;
        s/main.*log://g;
        print $_."\n";
    }
}

в командной строке

$ perl perl.pl SCALE_*

или это

$ perl -ne 'if (/EMS/){ s/SCALE_//g;s/main.*log://g; print $_} ;' SCALE_*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...