Chinaunix

标题: perl -p -i.bak -w -e "s/nihao/1/g" *.txt无法运行[已解决] [打印本页]

作者: xiaoxingan99    时间: 2015-08-20 10:15
标题: perl -p -i.bak -w -e "s/nihao/1/g" *.txt无法运行[已解决]
本帖最后由 xiaoxingan99 于 2015-08-20 17:02 编辑
  1. perl -p -i.bak -w -e "s/nihao/1/g" *.txt
复制代码
Can't open *.txt: Invalid argument.
windows系统下,已经将书上正则的单引号改成双引号了,依然不行
用双引号或者单引号引上*.txt也同样提示错误
有谁帮忙解释一下嘛?谢谢!
但是如果把*.txt改成完整的文件名,如a.txt就可以执行。
作者: 104359176    时间: 2015-08-20 13:05
对于 *.txt 的扩展,不是 Perl 的任务,是 Shell 的职责,因为还是在 Shell 的环境中。不能前面有 perl -p, 后面的所有的都是 Perl 的事情,否则为什么要将代码用引号呢?

你根据不同的 shell 写出不同的扩展代码就好了。


作者: xiaoxingan99    时间: 2015-08-20 13:21
回复 2# 104359176


    谢谢你的回复

不知道是不是我看书看的不仔细,shell是类似windows系统的cmd的意思吧?因为我只用过windows系统

按照你的回复,我是否可以理解为命令行不能支持元字符*?只能自己列出来所有文件是吗?

作者: 104359176    时间: 2015-08-20 13:40
是 perl 的参数中不支持元字符,不是命令行不支持。你可以用 cmd 的语句将 *.txt 扩展了以后出入 Perl 的解释器。
作者: 104359176    时间: 2015-08-20 13:43
我只知道 Bash Shell 的写法:
  1. ls | while read i;do perl $i;done
复制代码

作者: xiaoxingan99    时间: 2015-08-20 14:00
回复 4# 104359176


    谢谢
作者: xiaoxingan99    时间: 2015-08-20 14:02
请假了一个朋友,给了一个bat脚本实现方法
for /f %%a in ('dir /b *.txt') do perl -p -i.bak -w -e "s/nihao/1/g" %%~a

作者: yybmsrs    时间: 2015-08-20 14:07
可能是windows不支持

可以这样  perl -p -i.bak -w -e "BEGIN{@ARGV=glob '*txt'}s/nihao/1/g"
作者: xiaoxingan99    时间: 2015-08-20 14:14
回复 8# yybmsrs


    这个对于我这个只见过windows的新手比较容易理解,谢谢!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2