Regex 在windows中用perl替换所有文件中的字符串

Regex 在windows中用perl替换所有文件中的字符串,regex,windows,perl,Regex,Windows,Perl,我想在windows中的所有文件中用另一个字符串替换一个字符串。 具有相同扩展名的所有文件。 我尝试使用以下perl一行程序命令,但似乎“*”不适用于windows perl.exe -pi.bak -e "s/Hello/ABCD/ge" C:\Users\Jamimb\Desktop\Test\*.tmp 所以请帮忙。你可以试试这个(也许): 您可以使用glob从Perl中显式扩展命令行参数 此外,在本例中,替换上的/e(“eval”)修饰符是错误的。如果strict到位,则会导致一个不允

我想在windows中的所有文件中用另一个字符串替换一个字符串。 具有相同扩展名的所有文件。 我尝试使用以下perl一行程序命令,但似乎“*”不适用于windows

perl.exe -pi.bak -e "s/Hello/ABCD/ge" C:\Users\Jamimb\Desktop\Test\*.tmp
所以请帮忙。

你可以试试这个(也许):


您可以使用
glob
从Perl中显式扩展命令行参数

此外,在本例中,替换上的
/e
(“eval”)修饰符是错误的。如果
strict
到位,则会导致一个不允许出现的错误,但如果没有它,则是不允许的,因为
ABCD
的计算结果是
'ABCD'

试试这个

perl -i.bak -pe "BEGIN{@ARGV = map glob, @ARGV} s/Hello/ABCD/g" C:\Users\Jamimb\Desktop\Test\*.tmp

我怀疑这种等效方法在Linux中有效,因为命令解释器外壳在程序执行之前,会将任何带有*的文件名扩展为实际文件名的列表。它在Windows中可能不起作用,因为*的这种通配符扩展在Windows中没有发生。@Paul:还有其他方法代替*吗?如果从cygwin或其他shell而不是通常的dos命令行运行,perl的性能可能会更好。在尝试之前,请检查perl是否会修改单个文件。如果它不会修改您命名的单个文件,那么修复*@Paul就没有意义了:“像Linux一样表现”不是“表现得更好”的同义词。Linux有很多优点,但在查看之前,让任何看起来像文件glob的参数为您展开并不是其中之一。非常感谢..以上适用于同一目录中的文件。有没有办法替换子目录文件中的字符串?我不明白你的意思。它将使用命令行参数中指定的任何目录。如果您传递多个参数,它还将扩展多个通配符表达式,如
perl。。。路径1/*.tmp路径1/subdir/*.tmp
perl -i.bak -pe "BEGIN{@ARGV = map glob, @ARGV} s/Hello/ABCD/g" C:\Users\Jamimb\Desktop\Test\*.tmp