在多个文件中查找和替换正则表达式的最佳工具是什么?
题
如果可能的话最好免费工具。
此外,搜索多个正则表达式并每个替换为不同字符串的选项将是一个额外的好处。
解决方案
的Perl。说真的,它使sysadmin的东西变得如此简单。这是一个例子:
perl -pi -e's / something / somethingelse / g'* .log
其他提示
快速而简单:
sed -e "s/pattern/result/" <file list>
您也可以使用find:
加入它find <other find args> -exec sed -e "s/pattern/result/" "{}" ";"
Textpad 在Windows上做得很好。而且它也是一个非常好的编辑。
我为Windows编写了一个免费的命令行工具来执行此操作。它被称为 rxrepl ,它支持unicode和文件搜索。有些人可能觉得它很有用。
不出所料,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等文件格式。
我会选择bash + find + sed。
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
在Windows中,有一种最好的免费替代方法:Notepad ++
转到“搜索” - &GT; “在文件中查找”。可以给出目录,文件模式,设置正则表达式然后预览匹配,最后递归替换所有文件。
我喜欢这个工具:
给你一个“当你输入”时正则表达式的预览......对于那些不太熟悉RE的人来说非常棒...而且它一次只能更改数百或数千个文件......
然后让你贬低你的改变......
非常好......
Patrick Steil - http://www.podiotools.com
如果'textpad'是一个有效的答案,我建议你 Sublime Text 。
我发现,多光标编辑是一种更有效的替换方法,但是它的“在文件中查找“是批量正则表达式/普通查找替换的顶级。
jEdit 的正则表达式搜索和替换文件非常不错。但是如果你只是用它那就略微矫枉过正了。它也不支持你要求的多表达式替换。
我发现 RxFind 工具很有用(免费的OSS)。
Brackets (源代码,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