如果可能的话,最好是免费的工具。
此外,搜索多个正则表达式并将每个替换为不同字符串的选项将是一个奖励。
珀尔。
说真的,它使系统管理员的工作变得更加容易。这是一个例子:
perl -pi -e 's/something/somethingelse/g' *.log
sed
快速简单:
sed -e "s/pattern/result/" <file list>
你也可以加入它find
:
find <other find args> -exec sed -e "s/pattern/result/" "{}" ";"
我已经为 Windows 编写了一个免费的命令行工具来执行此操作。它被称为rxrepl,它支持 unicode 和文件搜索。有些人可能会觉得它很有用。
Textpad在 Windows 上做得很好。它也是一个非常好的编辑器。
不出所料,Perl 可以很好地处理这个问题,并结合了一个不错的 shell:
for file in @filelist ; do
perl -p -i -e "s/pattern/result/g" $file
done
这具有与以下相同的效果(但效率更高,并且没有竞争条件):
for file in @filelist ; do
cat $file | sed "s/pattern/result/" > /tmp/newfile
mv /tmp/newfile $file
done
Emacs 的目录编辑器具有 `dired-do-query-replace-regexp' 功能来搜索和替换一组标记文件的正则表达式。
Windows下,以前喜欢WinGrep
在 Ubuntu 下,我使用 Regexxer。
对于 Windows 上的多个文件的查找和替换,我发现rxFind非常有用。
对于 Mac OS X,TextWrangler 可以完成这项工作。
我个人最喜欢的是JGSoft的 PowerGrep。它与RegexBuddy接口,可以帮助您创建和测试正则表达式,自动备份所有更改(并提供撤消功能),提供解析多个目录(带有文件名模式)的能力,甚至支持 Microsoft Word 等文件格式、Excel 和 PDF。
在 Windows 中,有一个效果最好的免费替代方案:Notepad++
转到“搜索”->“在文件中查找”。可以给出目录、文件模式、设置正则表达式,然后预览匹配项,最后递归替换所有文件。
我喜欢这个工具:
为您提供正则表达式的“键入时”预览......对于那些不熟悉 RE 的人来说太棒了......并且一次更改数百或数千个文件的速度非常快......
然后让您也撤消您的更改...
非常好...
帕特里克·斯蒂尔 - http://www.podiotools.com
我会选择 bash + find + sed。
jEdit在文件中的正则表达式搜索和替换相当不错。但是,如果您仅将其用于此目的,则有点矫枉过正。它也不支持您要求的多表达式替换。
Vim 用于救援(和总统 ;-))。尝试:
vim -c "argdo! s:foo:bar:gci" <list_of_files>
(我很喜欢 Vim 的 -c 开关,它很神奇。或者如果你已经在 Vim 中,并打开了文件,例如:
vim <list_of_files>
只需发出:
:bufdo! s:foo:bar:gci
当然sed
,perl
也有能力。HTH。
我拥有 Unix 和 Ubuntu 的奢侈;在这两种情况下,我都将gawk用于需要逐行搜索和替换的任何内容,尤其是对于子字符串的逐行搜索。最近,这是针对数百个文件(一个目录)中的数百万行处理 1100 次更改的最快方法在 Ubuntu 上,我是 regexxer 的粉丝
sudo apt-get install regexxer
如果 'textpad' 是一个有效的答案,我会建议Sublime Text放下手。
一般来说,多光标编辑是一种更有效的替换方式,但它的“在文件中查找”是批量正则表达式/普通查找替换的顶级。
我发现RxFind工具很有用(免费 OSS)。
括号(源代码、deb/Ubuntu、OSx 和 Windows)具有良好的结果可视化效果,允许单独选择它们以应用替换。您可以按标准文本、区分大小写或不区分大小写以及正则表达式进行搜索。非常重要:您可以在搜索中排除文件和目录的模式。
至少 25 年来,我一直在使用 Emacs 对大量文件进行大规模替换。运行etags
以指定要搜索的任何文件集:
$ etags file1.txt file2.md dir1/*.yml dir2/*.json dir3/*.md
然后打开 Emacs 并运行tags-query-replace
,提示输入正则表达式和替换:
\b\(foo\)\b
\1bar