2009-09-29 22 views
0

我嘗試了搜索和目錄中的所有文件替換如下:爲什麼我的反斜槓在我的Perl單線程中消失?

/usr/bin/perl -p -i -e "s/Else/Else FILE_WRITE(\"C:\\TestDir\\mes.txt","Message received");/g"   *.scr 

這是"Else FILE_WRITE(\"C:\TestDir\mes_.txt","Message received");"

但更換更換的Else所有發生難度看到如下:

Else FILE_WRITE("C:TestDir^@mes.txt); 

我錯過了什麼?

回答

5

這實際上是一個shell問題,而不是Perl問題。

您需要在文件名中跳過斜槓,否則shell會將它們解釋爲轉義序列。

你有什麼權利現在:

$ echo "s/Else/Else FILE_WRITE(\"C:\TestDir\mes.txt","Message received");/g" 
bash: syntax error near unexpected token `)' 

你想要什麼:

$ echo "s/Else/Else FILE_WRITE(\"C:\\TestDir\\mes.txt\",\"Message received\");/g" 
s/Else/Else FILE_WRITE("C:\TestDir\mes.txt","Message received");/g 

在未來,儘量使用單引號代替雙引號。然後,你可以不逃逸寫:

$ echo 's/Else/Else FILE_WRITE("C:\TestDir\mes.txt","Message received");/g' 
s/Else/Else FILE_WRITE("C:\TestDir\mes.txt","Message received");/g 

Perl的靈活Q和QQ運營商也有幫助:

$ perl -e 'print q{A double quote looks like this -> "}' 
A double quote looks like this -> " 
+1

儘管如此更換後的反斜槓丟失。以下是更換後的文件。 其他FILE_WRITE(「C:TestDirmes.txt」,「收到消息」); – 2009-09-29 09:34:43

+1

你也必須從Perl中跳出斜槓。 – jrockway 2009-09-29 10:03:51

+1

單引號不代表Windows cmd.exe外殼的任何內容,因此您不能使用它們來引用您的參數。 – 2009-09-29 23:08:08

相關問題