通过Perl脚本替换文件中的字符

时间:2014-09-24 06:01:17

标签: perl

我正在尝试使用perl脚本在文本文件中用linux样式行结束字符\r\n替换windows行结束字符\n。我在脚本中写的内容如下:

system("perl -pi -e s/\r\n/\n/g input.txt");

结果警告是:

  

替换模式未在-e第1行终止

如果我知道这个命令错在哪里,我会很高兴。

编辑:当我使用时:

system("perl -pi -e 's/\r\n/\n/g' words.txt");

我收到了这个警告:

  

在EOF -e line 1

之前的任何地方都找不到字符串终结符“'”

提前致谢。

3 个答案:

答案 0 :(得分:3)

分隔系统调用的args。这将帮助您避免使用正确的引用和转义:

system('perl', '-i', '-pe', 's/\r\n/\n/g', 'input.txt');

但是,我建议您只使用$INPLACE_EDIT

执行此操作
my $file = 'input.txt';

local @ARGV = $file;
local $^I = '';
while (<>) {
    s/\R/\n/;
    print;
}

答案 1 :(得分:2)

perl -p -i -e 's/\r\n/\n/g' input.txt

您的正则表达式中缺少''。因此错误Substitution pattern not terminated at -e line 1

答案 2 :(得分:1)

您正在Windows上运行脚本,因此您必须更改简单的引号和双引号,并定义-i标志的扩展名。

system('perl -i.bak -p -e "s/\r\n/\n/g" words.txt');