我尝试搜索并替换目录中的所有文件,如下所示:
/usr/bin/perl -p -i -e "s/Else/Else FILE_WRITE(\"C:\\TestDir\\mes.txt","Message received");/g" *.scr
即用Else
"Else FILE_WRITE(\"C:\TestDir\mes_.txt","Message received");"
的所有出现
但是替换被认为如下:
Else FILE_WRITE("C:TestDir^@mes.txt);
我错过了什么?
答案 0 :(得分: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 -> "