【问题标题】:perl replace curly brackets with normal bracketsperl 用普通括号替换大括号
【发布时间】:2012-09-03 15:28:11
【问题描述】:

我需要编写一个脚本来查看文件并用普通括号替换任何大括号。到目前为止我有:

use strict;
use warnings;
open(INFILE,"<rscore") || die "Couldn't open rscore for reading!\n";
open(OUTFILE,">rscore.new") || die "Couldn't open rscore.new for writing!\n";
while(<INFILE>){
  $_ =~ s/{/(/gi; #g for every occurrence, i for case-insensitive
  print OUTFILE $_;
}
close INFILE;
close OUTFILE;
rename("rscore.new","rscore") || die "Couldn't rename the new file!\n"; 

并得到以下错误:

syntax error near line 10 near insensitive print.

这可能是愚蠢的。此外,如果有更有效的方法来做到这一点(我确信有),我愿意接受建议。

【问题讨论】:

  • 你需要用 \ 来转义你的左括号。
  • 您的语法错误似乎是由注释中的换行符引起的,导致“不区分大小写”被拆分,“不区分大小写”最终出现在 print 上方的未注释行上。这可能是由于使用了不适合编写代码的编辑器。
  • 孤独的牧羊人:不,你没有; ( 替换部分没有什么特别的

标签: perl replace


【解决方案1】:

这是一个 perl 单行代码。

$ perl -lpe 'tr |{}|()|' <infile >outfile

【讨论】:

  • > 这个时候出乎意料?
  • @brucezepplin:$ 是 shell 提示符,表示这是一个类似于 sh 的 shell(bash 等人)的命令行。如果您在没有 bash 克隆的 Windows 上,那么您可能需要将单引号替换为双引号:c:&gt; perl -lpe "tr |{}|()|" &lt;infile &gt;outfile。同样,c:&gt; 只是 shell 提示符,所以不要输入。
  • &lt; 在使用-p-n 开关时是多余的。
  • 他可能甚至不需要 perl 脚本,而是直接使用tr 命令:tr '{}' '()' infile &gt; outfile
【解决方案2】:

试试这个:

$string =~ tr/{}/()/;

【讨论】:

    【解决方案3】:

    这是一个用于就地编辑文件的 perl 单行器

    perl -pi -e 's/{/(/g;s/}/)/g' your_file
    

    下面将在控制台上打印输出

    perl -p -e 's/{/(/g;s/}/)/g' your_file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 2017-09-07
      • 2019-02-03
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多