我正在尝试使用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
之前的任何地方都找不到字符串终结符“'”
提前致谢。
答案 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');