perl 替换文件夹中的多个文件

Posted

技术标签:

【中文标题】perl 替换文件夹中的多个文件【英文标题】:perl replace multi files in. a folder 【发布时间】:2014-06-01 12:24:04 【问题描述】:

这行得通

Perl -pi.bak -e "s/\\t/\t/g;" one.xml

但这不适用于文件夹中的所有 xmls

Perl -pi.bak -e "s/\\t/\t/g;" *.xml

不断收到错误cannot open *.xml

尝试了各种方法并将* 识别为通配符

【问题讨论】:

让我猜猜,你是在 Windows 上工作吗? 是的,在 xml 所在的文件夹中运行 windows 命令行上的命令 【参考方案1】:

您看到的是cannot open *.xml,因为与 Unix shell 不同,Windows CMD shell 不扩展通配符。

如果你想继续使用cmd,你可以形成一个for loop over files,或者你可以切换到更强大的东西,比如PowerShell,然后试试这个(未经测试):Perl -pi.bak -e "s/\\t/\t/g;" (Get-ChildItem *.xml | % "$_" )

【讨论】:

好吧,这是有道理的。谢谢你【参考方案2】:

不幸的是,windows cmd 没有与 unix shell 一样的扩展通配符的能力。

您可以通过告诉 perl 您想使用 glob 扩展 @ARGV 来解决此问题

perl -i.bak -pe "BEGIN @ARGV = map glob, @ARGV s/\\t/\t/g;" *.xml

【讨论】:

以上是关于perl 替换文件夹中的多个文件的主要内容,如果未能解决你的问题,请参考以下文章

Perl 使用perl命令批量替换文件内容

sed 或 Perl 一行 + 如何仅在完全匹配时替换文件中的路径

如何使用 Perl 进行批量搜索和替换?

Perl实例---批量替换内容

Perl 命令行多行替换

perl求助:geneid替换成gene symbol