用Perl脚本替换文件中的字符

用Perl脚本替换文件中的字符,perl,Perl,我正在尝试使用perl脚本将文本文件中的windows行结束字符\r\n替换为linux样式的行结束字符。我在脚本中写的内容如下: system("perl -pi -e s/\r\n/\n/g input.txt"); 由此产生的警告是: 替代模式未终止于-e第1行 如果我知道这个命令哪里错了,我会很高兴的 编辑:当我使用: system("perl -pi -e 's/\r\n/\n/g' words.txt"); 我得到这个警告: 在-e第1行的EOF之前的任何位置都找不到字符串终止符

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

system("perl -pi -e s/\r\n/\n/g input.txt");
由此产生的警告是:

替代模式未终止于-e第1行

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

编辑:当我使用:

system("perl -pi -e 's/\r\n/\n/g' words.txt");
我得到这个警告:

在-e第1行的EOF之前的任何位置都找不到字符串终止符


提前感谢。

为您的系统调用分离参数。这将帮助您避免使用正确的引用和转义:

system('perl', '-i', '-pe', 's/\r\n/\n/g', 'input.txt');
但是,我建议只使用$INPLACE\u EDIT执行此操作:


你在正则表达式中丢失了。因此,如果在Windows上运行脚本,错误替换模式不会在-e行1终止,因此必须更改简单引号和双引号,并定义-i标志的扩展


感谢您的回复,当我在编辑的问题中隐藏更改时,我收到了另一个警告感谢您的回复,我已经应用了更改,现在出现了字符串终止符错误。还需要转义反斜杠。谢谢,警告已消失,但目前\r\n字符仍保留在文本文件中。
my $file = 'input.txt';

local @ARGV = $file;
local $^I = '';
while (<>) {
    s/\R/\n/;
    print;
}
perl -p -i -e 's/\r\n/\n/g' input.txt
system('perl -i.bak -p -e "s/\r\n/\n/g" words.txt');