Perl单线Windows 10 / Power Shell:用* .sql结尾的多个文件替换字符串不起作用(*不能识别)

问题描述 投票:0回答:1

以下使用“ *”的通配符的单行Perl语句不起作用:

>>> perl -i'.bak' -pe 's#__SUB__CWD__#'$(pwd)'#g' *.sql
Can't open *.sql: Invalid argument. 

以下语句有效,但仅当您提供单个文件作为参数时:

>>> perl -p -i'.bak' -e 's#__SUB__CWD__#'$(pwd)'#g' A_SINGLE_FILE.sql

有什么想法可以使perl意识到“ *”必须以REGEX方式阅读吗?

我正在尝试以吨文件替换所有出现的“ SUB__CWD”。

C.f。 https://github.com/oracle/db-sample-schemas/blob/master/README.md

windows powershell perl glob
1个回答
0
投票

这不是Perl的错,这是Windows的错。 Linux外壳程序会为您扩展通配符,cmd.exe则不会。

此外,您也不想以正则表达式的方式解释星号,而是以glob模式的方式解释。在正则表达式中,*表示“先前的内容应重复零次或多次”。

您可以使用Perl的glob函数:

perl -p -i.bak -e 'BEGIN {@ARGV = glob "*.sql"; $pwd} s#__SUB__CWD__#'$(pwd)#g'
© www.soinside.com 2019 - 2024. All rights reserved.