Strawberry Perl - 在 Windows 中搜索和替换
Strawberry Perl - Search and replace in Windows
我正在尝试执行以下命令:
perl -pi -e 's,vaadin-element,color-picker,g' *.* demo/* test/* src/* theme/*/*
(遵循 this 文档)
不幸的是,我使用的 pearl 的 window 发行版的命令似乎有一些问题,因为我收到以下错误:
Can't open *.*: Invalid argument.
Can't open demo/*: Invalid argument.
Can't open test/*: Invalid argument.
Can't open src/*: Invalid argument.
Can't open theme/*/*: Invalid argument.
关于如何解决这个问题有什么建议吗?
提前致谢!
免责声明:我以前从未使用过珍珠,也完全没有经验。
在 Unix-derived 操作系统中,shell 像 *.*
一样扩展了 glob,并将命令行作为字符串数组提供给程序。
在Windows中,命令行是一个字符串,由程序来解释它的含义,包括引号字符和globs。如果程序是普通的 C 程序,C 运行时解释命令行,扩展 glob,并将字符串数组传递给 main
。这是因为 C 标准要求这样做。
但是 Perl 不是 C。使用 File::Glob
库来扩展参数。
在 unix 系统中,shell 扩展 glob 并将文件名传递给程序。
$ perl -e'CORE::say for @ARGV' *
file1
file2
另一方面,Windows shell 按原样传递值,并让程序根据需要将它们视为 glob。
>perl -e"CORE::say for @ARGV" *
*
您可以按如下方式执行通配:
>perl -MFile::DosGlob=glob -e"BEGIN { @ARGV = map glob, @ARGV } CORE::say for @ARGV" *
file1
file2
通常不需要 BEGIN
块,但它会确保在使用 -n
(-p
暗示)时足够早地通配一次。
-MFile::DosGlob=glob
使 glob
具有 Windows-like 语义。例如,它会导致 *.*
匹配所有文件,即使它们不包含 .
.
综合:
perl -i -MFile::DosGlob=glob -pe"BEGIN { @ARGV = map glob, @ARGV } s,vaadin-element,color-picker,g" *.* demo/* test/* src/* theme/*/*
我正在尝试执行以下命令:
perl -pi -e 's,vaadin-element,color-picker,g' *.* demo/* test/* src/* theme/*/*
(遵循 this 文档)
不幸的是,我使用的 pearl 的 window 发行版的命令似乎有一些问题,因为我收到以下错误:
Can't open *.*: Invalid argument.
Can't open demo/*: Invalid argument.
Can't open test/*: Invalid argument.
Can't open src/*: Invalid argument.
Can't open theme/*/*: Invalid argument.
关于如何解决这个问题有什么建议吗? 提前致谢!
免责声明:我以前从未使用过珍珠,也完全没有经验。
在 Unix-derived 操作系统中,shell 像 *.*
一样扩展了 glob,并将命令行作为字符串数组提供给程序。
在Windows中,命令行是一个字符串,由程序来解释它的含义,包括引号字符和globs。如果程序是普通的 C 程序,C 运行时解释命令行,扩展 glob,并将字符串数组传递给 main
。这是因为 C 标准要求这样做。
但是 Perl 不是 C。使用 File::Glob
库来扩展参数。
在 unix 系统中,shell 扩展 glob 并将文件名传递给程序。
$ perl -e'CORE::say for @ARGV' *
file1
file2
另一方面,Windows shell 按原样传递值,并让程序根据需要将它们视为 glob。
>perl -e"CORE::say for @ARGV" *
*
您可以按如下方式执行通配:
>perl -MFile::DosGlob=glob -e"BEGIN { @ARGV = map glob, @ARGV } CORE::say for @ARGV" *
file1
file2
通常不需要 BEGIN
块,但它会确保在使用 -n
(-p
暗示)时足够早地通配一次。
-MFile::DosGlob=glob
使 glob
具有 Windows-like 语义。例如,它会导致 *.*
匹配所有文件,即使它们不包含 .
.
综合:
perl -i -MFile::DosGlob=glob -pe"BEGIN { @ARGV = map glob, @ARGV } s,vaadin-element,color-picker,g" *.* demo/* test/* src/* theme/*/*