Что делает ключ командной строки Perl -p? - PullRequest
4 голосов
/ 19 марта 2010
perl -p -i.bak -e 's/search_str/replace_str/g' filename

Что означают -p, -i.bak s/ и /g?

Ответы [ 6 ]

13 голосов
/ 19 марта 2010
  • -p: предположим, 'while (<>) { ... }' Зациклить программу и распечатать каждый обработанная линия тоже.
  • -i.bak: изменить входной файл (filename) на месте и создайте файл filename.bak в качестве резервной копии.
  • s in s/: отметить замену
  • g - сделать замену глобально .. это не останавливаться после Первая замена.
8 голосов
/ 19 марта 2010

С perlrun :

-p

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

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

Этот кусок кода:

perl <a href="http://perldoc.perl.org/perlrun.html#%2A-p%2A" rel="nofollow noreferrer">-p</a> <a href="http://perldoc.perl.org/perlrun.html#%2A-i%2A%5b_extension_%5d" rel="nofollow noreferrer">-i.bak</a> <a href="http://perldoc.perl.org/perlrun.html#%2A-e%2A" rel="nofollow noreferrer">-e</a> '<a href="http://perldoc.perl.org/perlop.html/#s%2fPATTERN%2fREPLACEMENT%2fmsixpogce" rel="nofollow noreferrer">s/search_str/replace_str/g</a>' filename

По сути то же самое, что и:

#! /usr/bin/env perl
$extension = '.orig';
LINE:
  while (<>) {
    # -i.bak
    if ($ARGV ne $oldargv) {
      if ($extension !~ /\*/) {
        $backup = $ARGV . $extension;
      } else {
        ($backup = $extension) =~ s/\*/$ARGV/g;
      }
      rename($ARGV, $backup);
      open(ARGVOUT, ">$ARGV");
      select(ARGVOUT);
      $oldargv = $ARGV;
    }

    s/search_str/replace_str/g;

  } continue {
    print;  # this prints to original filename
  }

select(STDOUT);
2 голосов
/ 19 марта 2010

Он автоматически прочитает строку из оператора diamond, выполнит сценарий и напечатает $ _.

Для получения более подробной информации перейдите по следующей ссылке.

Perl -p

2 голосов
/ 19 марта 2010

См. perldoc perlrun.

Этот однострочник изменяет каждое вхождение от search_str до replace_str в каждой строке файла, автоматически печатая полученную строку.

Переключатель -i.bak заставляет его изменить файл на месте и сохранить резервную копию в другом файле с расширением .bak.

1 голос
/ 19 марта 2010

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

  1. Обратите внимание, что строки печатаются автоматически. Для подавления печати используйте ключ -n. -P переопределяет ключ -n.

текст ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...