【发布时间】:2015-09-09 09:16:45
【问题描述】:
我正在尝试在 Windows 代码上找到一个 Perl,它使我能够对特定目录中的多个文件应用多个查找和替换正则表达式查询。我可以使用许多文本编辑器(例如 UltraEdit)应用多个查找和替换正则表达式查询。
【问题讨论】:
我正在尝试在 Windows 代码上找到一个 Perl,它使我能够对特定目录中的多个文件应用多个查找和替换正则表达式查询。我可以使用许多文本编辑器(例如 UltraEdit)应用多个查找和替换正则表达式查询。
【问题讨论】:
您的问题描述性不是很强。这符合您的要求吗?
编辑后可在 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
除非您只进行一些更改,否则最好将替换命令放在一个文件中,像这样
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 -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.
E:\My\Folder 1\Folder 2。当我添加双引号时,它会出错。
perl -i.bak -p changes.pl "\"E:/My/Folder 1/Folder 2/\""*.txt
这是一个基本的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.
cd "My\Files\Directory") 然后运行 perl myreplacers.pl *.txt