【问题标题】:Apply multiple find and replace regex queries on multiple .txt files using a Perl code使用 Perl 代码对多个 .txt 文件应用多个查找和替换正则表达式查询
【发布时间】:2015-09-09 09:16:45
【问题描述】:

我正在尝试在 Windows 代码上找到一个 Perl,它使我能够对特定目录中的多个文件应用多个查找和替换正则表达式查询。我可以使用许多文本编辑器(例如 UltraEdit)应用多个查找和替换正则表达式查询。

【问题讨论】:

    标签: regex windows perl


    【解决方案1】:

    您的问题描述性不是很强。这符合您的要求吗?

    编辑后可在 Windows 上运行

    perl -i.bak -pe"BEGIN {@ARGV = map glob, @ARGV} s/a/b/g; s/c/d/g; s/e/f/g; " My/Files/Directory/*.txt
    

    更新

    除非您只进行一些更改,否则最好将替换命令放在一个文件中,像这样

    changes.pl

    BEGIN {
        @ARGV = map glob("\"$_\""), @ARGV;
    }
    
    s/a/b/g;
    s/c/d/g;
    s/e/f/g;
    

    然后你可以像这样在命令行的一组文件上运行它

    perl -i.bak -p changes.pl My/Files/Directory/*.txt
    

    【讨论】:

    • 是的,这就是我想要做的。我正在尝试使用 perl 对特定目录中的所有文件应用多个查找和替换查询。我试过这个命令行perl -i -pe"s/a/b/g; s/c/d/g; s/e/f/g; " "My\Files\Directory\"*.txt,结果是Can't open My\Files\Directory\"*.txt: Invalid argument.
    • @omareg94:好的,你在 WINdows 上。如果是这种情况,向您的问题添加 Windows 标记总是有帮助的。我已经更改了我的解决方案,向您展示了一个可行的命令行解决方案,以及一个可以让您将所有替换项放入源文件的混合解决方案
    • @omareg94:顺便说一句,不要将正斜杠更改为反斜杠——即使在 Windows 上也是如此
    • 现在运行良好。只是一个遗留问题。我怎么能提到名称中有空格的文件夹?例如E:\My\Folder 1\Folder 2。当我添加双引号时,它会出错。
    • 感谢Ed Guiness,我已经找到了包含空间目录的解决方案。现在脚本使用这种语法 perl -i.bak -p changes.pl "\"E:/My/Folder 1/Folder 2/\""*.txt
    【解决方案2】:

    这是一个基本的perl 程序(也许将其命名为myreplacers.pl)可以做到这一点:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    while(<>) {
      s/regex1/replace1/;
      s/regex2/replace2/;
      print;
    }
    

    用适当的正则表达式和替换文本改变它并像perl myreplacers.pl file1 file2等一样运行它。

    【讨论】:

    • 我如何告诉它对特定目录中的所有文件应用替换?
    • perl myreplacers.pl * 将对特定目录中的所有文件执行此操作,除非目录真的很大,在这种情况下使用find . -maxdepth 1 -print0 |xargs -0 perl myreplacers.pl
    • 我已经运行了命令行perl myreplacers.pl "My\Files\Directory\"*.txt 结果是Can't open My\Files\Directory\"*.txt: Invalid argument at myreplacers.pl line 5.
    • 哦,Windows。对于那个很抱歉。跳过目录是最简单的;首先更改目录 (cd "My\Files\Directory") 然后运行 ​​perl myreplacers.pl *.txt
    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2016-10-07
    • 2020-03-06
    相关资源
    最近更新 更多