在 Windows 命令提示符下,我生成一个目录中所有文件的文本文件:
dir c:\logfiles /B > config.txt
Output:
0001_832ec657.log
0002_a7c8eafc.log
我需要将“config.txt”文件提供给另一个可执行文件,但在此之前,我需要修改该文件以添加可执行文件所需的一些附加信息。所以我使用以下命令:
perl -p -i.bak -e 's/log/log,XYZ/g' config.txt
我期望结果是:
0001_832ec657.log,XYZ
0002_a7c8eafc.log,XYZ
但是,“config.txt”文件未被修改。使用“-w”选项,我收到警告消息:
在 -e 第 1 行的 void 上下文中无用地使用常量。
我究竟做错了什么?
Windows cmd.exe
不使用'
作为字符串分隔符,仅"
。你正在做的事情相当于:
perl -p -i.bak -e "'s/log/log,XYZ/g'" config.txt
so -w
抱怨“你给了我一根绳子,但它什么也没做”。
解决方案是使用双引号代替:
perl -p -i.bak -e "s/log/log,XYZ/g" config.txt
或者干脆将它们保留掉,因为此命令中没有元字符可以由cmd.exe
.
Addendum
cmd.exe
对于习惯了的人来说,这只是一个非常麻烦的野兽sh
-像贝壳一样。以下是一些其他常见故障和解决方法perl
调用。
@REM doesn't work:
perl -e"print"
@REM works:
perl -e "print"
@REM doesn't work:
perl -e "print \"Hello, world!\n\""
@REM works:
perl -e "print qq(Hello, world!\n)"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)