Perl的-p命令行开关有什么作用?

时间:2010-03-19 11:50:11

标签: perl

perl -p -i.bak -e 's/search_str/replace_str/g' filename

-p-i.bak s//g的含义是什么?

6 个答案:

答案 0 :(得分:13)

  • -p:假设“while (<>) { ... }” 循环程序并打印每个 加工生产线。
  • -i.bak:更改输入文件 (filename)inplace并创建 文件filename.bak作为备份。
  • s in s/:标记替换
  • g - 进行替换 全球......不要停止 第一次更换。

答案 1 :(得分:8)

来自perlrun

  

-p

     

导致Perl在程序周围采用以下循环,这使得它迭代文件名参数,有点像sed:

  LINE:
    while (<>) {
        ...             # your program goes here
    } continue {
        print or die "-p destination: $!\n";
    }

答案 2 :(得分:3)

这段代码:

perl -p -i.bak -e 's/search_str/replace_str/g' 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);

答案 3 :(得分:2)

请参阅perldoc perlrun.

此单行更改文件每行中search_strreplace_str的每次出现,自动打印生成的行。

-i.bak开关会使其就地更改文件,并将备份存储到另一个.bak扩展名的文件中。

答案 4 :(得分:2)

它将自动从菱形运算符读取一行,执行脚本,然后打印$ _。

有关详细信息,请访问以下链接。

Perl -p

答案 5 :(得分:1)

1.causes perl假设你的脚本周围有以下循环,这使得它迭代文件名参数有点像sed:

  1. 请注意,线条会自动打印。要禁止打印,请使用-n开关。 A -p覆盖-n开关。
  2. link text