Pra*_*. S 0 perl command-line escaping
我尝试搜索并替换目录中的所有文件,如下所示:
/usr/bin/perl -p -i -e "s/Else/Else FILE_WRITE(\"C:\\TestDir\\mes.txt","Message received");/g" *.scr
Run Code Online (Sandbox Code Playgroud)
这取代了所有出现Else的"Else FILE_WRITE(\"C:\TestDir\mes_.txt","Message received");"
但是替换被认为如下:
Else FILE_WRITE("C:TestDir^@mes.txt);
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
这实际上是一个shell问题,而不是Perl问题.
您需要转义文件名中的斜杠,否则shell会将它们解释为转义序列.
你现在拥有的:
$ echo "s/Else/Else FILE_WRITE(\"C:\TestDir\mes.txt","Message received");/g"
bash: syntax error near unexpected token `)'
Run Code Online (Sandbox Code Playgroud)
你想要什么:
$ 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
Run Code Online (Sandbox Code Playgroud)
将来,请尝试使用单引号而不是双引号.然后你可以写而不逃避:
$ 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
Run Code Online (Sandbox Code Playgroud)
Perl灵活的q和qq运算符也很有用:
$ perl -e 'print q{A double quote looks like this -> "}'
A double quote looks like this -> "
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |