2014-09-24 38 views
1

我想用一个使用perl脚本的文本文件替换一个windows结束字符\r\n与linux样式行结尾字符\n。我已经写在剧本是为以下几点:用Perl脚本替换文件中的字符

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行EOF之前的任何地方1

提前致谢。

回答

3

分隔系统调用的参数。这将帮助你避免需要使用适当的引号和转义:

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; 
} 
+0

感谢您的回应,我已经应用了更改,现在有一个字符串终止符错误。 – 2014-09-24 06:16:51

+0

还需要避开反斜杠。 – Miller 2014-09-24 06:48:45

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

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

+0

感谢您的回复,我在修改问题时收到了另一个警告 – 2014-09-24 06:16:15

1

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

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

谢谢,警告已消失,但目前\ r \ n字符仍保留在文本文件中。 – 2014-09-24 06:39:02

相关问题