2009-06-09 262 views
2

在一組大文件中,我需要將所有出現的「\」替換爲「\\」。我想用Perl來達到這個目的。現在,我有以下幾點:Perl正則表達式:用雙反斜槓替換所有反斜槓

perl -spi.bak -e '/s/\\/\\\\/gm' inputFile 

此命令爲suggested給我,但它會導致沒有變化INPUTFILE(除更新的時間戳)。思考這個問題可能是,「\」 S沒有被空白包圍,我試圖

perl -spi.bak -e '/s/.\\./\\\\/gm' inputFile 

同樣,這對文件沒有影響。最後,我想我可能會丟失一個分號,所以我試過:

perl -spi.bak -e '/s/.\\./\\\\/gm;' inputFile 

這也沒有效果。我知道我的文件包含「\」 S,例如在下面一行:

("C:\WINDOWS\system32\iac25_32.ax","Indeo audio) 

我不知道是否有與正則表達式的問題,或者如果事情是錯的,我的方式調用Perl。我對正則表達式有一個基本的理解,但是在涉及到Perl時,我是絕對的初學者。

這裏有什麼明顯的錯誤嗎?我注意到的一件事是,儘管inputFile大小大約爲10MB,但命令很快返回。

回答

8

在命令行中處理反​​斜槓的難點在於知道有多少進程將操作命令行 - 以及它們的引用規則是什麼。

在Unix上,在任何shell下,您顯示的第一條命令行都可以工作。

您似乎在Windows上,並且在那裏,您有DOS命令'shell'來處理。

我把替換成一個文件,並傳遞給Perl:

#!/bin/perl -spi.bak 
s/\\/\\\\/g; 

這應該做的伎倆 - 另存爲「subber。PL」然後運行:

perl subber.pl file1 ... 
1

這應該如何取代所有\與\ s。

s/\\/\\\\/g 
+0

你\是轉義字符,所以\\被視爲一個文字\ – Copas 2009-06-09 21:11:39

0
perl -spi.bak -e 's/.\\./\\\\/gm;' inputFile 

可能? 你爲什麼鍵入那個領導/?

1
perl -pi -e 's/\\/\\\\/g' inputfile 

將取代所有的人都在一個文件中

+0

哦,和inputfile可以是一個模式,所以這可以修改所有文件在一個鏡頭 – 2009-06-09 21:18:23

1

s/\\/\\\\/g 

作品對我來說

你已經有了一個叛徒/在正則表達式開頭的替換標誌前面

不使用

.\\. 

否則將垃圾無論是前後文件後\

-1

你似乎是在Windows和 那裏,你必須在DOS命令 「殼'來處理。

希望我不會分裂頭髮,但Windows已經很長一段時間沒有用DOS。我認爲我(大約1999/2000)是DOS的最後一個版本,或者是DOS下的版本。 「命令」外殼程序自XP(一種DOS模擬)以來由cmd.exe控制,但在命令外殼程序中運行perl單行程程序的作用可能仍與在DOS外殼程序中運行它們相同。也許有人可以驗證。