2014-09-24 37 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

相關問題