以下使用“ *”的通配符的单行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
这不是Perl的错,这是Windows的错。 Linux外壳程序会为您扩展通配符,cmd.exe则不会。
此外,您也不想以正则表达式的方式解释星号,而是以glob模式的方式解释。在正则表达式中,*
表示“先前的内容应重复零次或多次”。
您可以使用Perl的glob函数:
perl -p -i.bak -e 'BEGIN {@ARGV = glob "*.sql"; $pwd} s#__SUB__CWD__#'$(pwd)#g'