【问题标题】:What's the best tool to find and replace regular expressions over multiple files?在多个文件中查找和替换正则表达式的最佳工具是什么?
【发布时间】:2010-09-11 06:03:51
【问题描述】:

如果可能,最好使用免费工具。

此外,搜索多个正则表达式并将每个替换为不同字符串的选项将是一个奖励。

【问题讨论】:

  • 这应该迁移到 SoftwareRecs.SE

标签: regex search replace


【解决方案1】:

Perl。

说真的,它使系统管理员的工作变得更加容易。这是一个例子:

perl -pi -e 's/something/somethingelse/g' *.log

【讨论】:

  • 对此的扩展将使用 egrep,例如:perl -pi -e 's/something/somethingelse/g'`egrep -ril "something" ./`
  • 请注意,标志是:p:打印,对于每一行,i:内联编辑文件,e:执行命令行上给出的命令
  • 如何使用rgxargs 做到这一点?
  • 有没有办法让 perl 将替换的值输出到一个新文件中,而另一个文件中没有不匹配的数据?
【解决方案2】:

sed 快捷方便:

sed -e "s/pattern/result/" <file list>

你也可以加入find:

find <other find args> -exec sed -e "s/pattern/result/" "{}" ";"

【讨论】:

  • 我同意快速....而且只有给定的简单值才容易。无论如何+1 ;)
  • 是的,但是当您必须将带有点、斜杠、引号等的 10 行长 html 代码粘贴到多个文件时,就会出现问题。
  • 这似乎不会更新文件,而只是输出它们。 -i 参数似乎可以解决这个问题。另见stackoverflow.com/questions/10445934/change-multiple-files
【解决方案3】:

我已经为 Windows 编写了一个免费的命令行工具来执行此操作。它叫rxrepl,它支持unicode和文件搜索。有些人可能会觉得它很有用。

【讨论】:

    【解决方案4】:

    Textpad 在 Windows 上做得很好。它也是一个非常好的编辑器。

    【讨论】:

    • TextPad 是一个优秀的编辑器(我个人最喜欢的),我不能再同意了。但是,虽然它会搜索多个文件(而且速度非常快),但它不会搜索和替换多个文件。
    • 是的。您需要做的是右键单击并在搜索结果中选择“全部打开”。这将打开所有找到的文件。然后在“替换”对话框中,单击“所有文档”单选按钮以获取替换位置。完成后,点击“全部保存”。
    【解决方案5】:

    不出所料,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
    

    【讨论】:

    • 我也喜欢使用“find -iname”来进行递归搜索。
    【解决方案6】:

    Emacs 的目录编辑器具有 `dired-do-query-replace-regexp' 功能来搜索和替换一组标记文件的正则表达式。

    【讨论】:

      【解决方案7】:

      在Windows下,我曾经喜欢WinGrep

      在 Ubuntu 下,我使用 Regexxer。

      【讨论】:

      • WinGrep 不再可用。现在您可以改用grepwin
      【解决方案8】:

      对于 Windows 上的多个文件的查找和替换,我发现 rxFind 非常有用。

      【讨论】:

        【解决方案9】:

        对于 Mac OS X,TextWrangler 可以完成这项工作。

        【讨论】:

        • 特别是因为它提供视觉反馈并允许您在将更改保存回文件之前查看所做的更改。不过,我更喜欢它的大哥 BBEdit,因为它具有更多的功能。虽然不像 TextWrangler 那样免费
        【解决方案10】:

        我个人最喜欢的是 JGSoft 的PowerGrep。它与RegexBuddy 接口,可以帮助您创建和测试正则表达式,自动备份所有更改(并提供撤消功能),提供解析多个目录(带有文件名模式)的能力,甚至支持文件格式,例如Microsoft Word、Excel 和 PDF。

        【讨论】:

          【解决方案11】:

          在 Windows 中,有一个效果最好的免费替代品:Notepad++

          转到“搜索”->“在文件中查找”。可以给出目录、文件模式、设置正则表达式,然后预览匹配项,最后递归替换所有文件。

          【讨论】:

            【解决方案12】:

            我喜欢这个工具:

            http://www.abareplace.com/

            在“键入时”为您提供正则表达式的预览...对于那些不熟悉 RE 的人来说太棒了...而且一次更改数百或数千个文件的速度非常快...

            然后让您也撤消您的更改...

            非常好...

            帕特里克·斯泰尔 - http://www.podiotools.com

            【讨论】:

              【解决方案13】:

              我会选择 bash + find + sed。

              【讨论】:

                【解决方案14】:

                jEdit 在文件中的正则表达式搜索和替换相当不错。但是,如果您仅将其用于此目的,则有点矫枉过正。它也不支持您要求的多表达式替换。

                【讨论】:

                  【解决方案15】:

                  Vim 用于救援(和总统 ;-))。试试:

                  vim -c "argdo! s:foo:bar:gci" <list_of_files>
                  

                  (我很喜欢 Vim 的 -c 开关,它很神奇。 或者如果你已经在 Vim 中,并打开了文件,例如:

                  vim <list_of_files>
                  

                  刚刚发布:

                  :bufdo! s:foo:bar:gci
                  

                  当然sedperl 也可以。 HTH。

                  【讨论】:

                    【解决方案16】:

                    我拥有 Unix 和 Ubuntu 的奢侈;在这两种情况下,我都将 gawk 用于需要逐行搜索和替换的任何内容,尤其是对于子字符串的逐行搜索。 最近,这是处理数百个文件(一个目录)中数百万行的 1100 次更改的最快速度 在 Ubuntu 上,我是 regexxer 的粉丝

                     sudo apt-get install regexxer
                    

                    【讨论】:

                      【解决方案17】:

                      如果 'textpad' 是一个有效的答案,我会建议 Sublime Text 放下手。

                      一般来说,多光标编辑是一种更有效的替换方法,但它的“Find in Files”是批量正则表达式/普通查找替换的顶级方法。

                      【讨论】:

                        【解决方案18】:

                        如果您是程序员:很多 IDE 也应该做得很好。

                        对我来说PyCharm 工作得很好:

                        • 编辑 > 查找 > 在路径中替换Strg + Shift + R
                        • 检查顶部的正则表达式

                        它有一个实时预览。

                        【讨论】:

                          【解决方案19】:

                          我发现工具 RxFind 很有用(免费 OSS)。

                          【讨论】:

                            【解决方案20】:

                            Brackets(源代码,deb/Ubuntu,OSx 和 Windows)具有良好的结果可视化,允许单独选择它们以应用替换。您可以按标准文本、区分大小写或不区分大小写以及正则表达式进行搜索。 非常重要:您可以在搜索中排除文件和目录的模式。

                            【讨论】:

                              【解决方案21】:

                              至少 25 年来,我一直在使用 Emacs 对大量文件进行大规模替换。运行etags 指定要搜索的任何文件集:

                              $ etags file1.txt file2.md dir1/*.yml dir2/*.json dir3/*.md
                              

                              然后打开 Emacs 并运行tags-query-replace,提示输入正则表达式和替换:

                              \b\(foo\)\b
                              \1bar
                              

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 2018-09-28
                                • 2018-09-20
                                • 1970-01-01
                                • 2017-07-24
                                • 2011-10-22
                                • 2020-04-22
                                • 1970-01-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多