多行搜索和替换工具

22

我正在寻找一个工具,可以在整个项目中替换多行文本。例如:

#include "../DiscreteIO/Discrete.h"
#include "../PCI/pci.h"
#include "../Arinc429/ARINC429.h"
with
#include "../PCI/pci.h"
#include "../DiscreteIO/DiscreteHW.h"
#include "../DiscreteIO/Discrete.h"

我已经尝试了两种适用于此类搜索和替换的工具。 WildeditActual search and replace,这两个工具都很好,但都是共享软件。 有没有类似的免费工具?或者现在是时候花一些钱了吗?

澄清:

在这种情况下,“项目”中的所有内容表示一千多个C文件。 文本编辑器只能一次处理一个文件(Textpad,Programmers notepad)或所有打开的文件(nodepad ++)。 我还没有尝试过其他编辑器,但我认为它们会有类似的问题。 如果我错了,请纠正我。

Sed,AWK和基于正则表达式的工具可以工作,但在某些情况下可能很麻烦。

Wild Edit可以运行,价格也不贵。

最终我决定提高我的正则表达式技能。


类似问题请参考这里 - Stephen Denne
正如我在答案中提供的教程所示,UltraEdit可以处理数千个文件,而无需在编辑器中打开。 - Stephen Denne
如果你总是需要这些文件一起使用,那么创建一个单独的头文件来包含所需内容并按顺序排列是否更好呢?最好的情况是头文件可以以任何顺序包含 - 每个头文件都应该是自包含和幂等的。我建议也要摆脱 "../" 符号。 - Jonathan Leffler
13个回答

12

The JetBrains系列的IDE(集成开发环境): IntelliJRubyMinePHPStorm等将执行多行搜索和替换。

选择要处理的文本并按下ctrl-shift-F-- 这将打开替换对话框,并以所选文本作为查找表达式(使用正则表达式,其中换行符被转义为\n)。


9

3
我不确定我做错了什么,但是当我运行sed -nf blockrep.sed findrep.txt命令生成custom.sed文件时,会出现错误sed: file blockrep.sed line 18: unterminated 's' command。查看该行的正则表达式(s,[/\[.*],\\&,g),在我看来它是正确的。 - gene_wood
只需编辑文件并将第18行的第二个[移动到]旁边: s,[/\[.*],\\&,g -> s,[/\.*[],\\&,g[]组内的[字符必须紧挨着右括号] 相反,]应该靠近左括号[。 https://sed-users.yahoogroups.narkive.com/dKa8Aba3/replace-block-of-text#post5 - Alessandro Cuttin
https://dev59.com/yXVC5IYBdhLWcg3whRcw#39280154 - Alessandro Cuttin

4
cd $PROJECTDIR && find . -iname '*.*' -exec vim -c 's:^first line of text\nsecond line of text\n3rd line of text:new 1st line\rnew 2nd\rnew 3rd:' -c 'w!' -c 'q' {} \;

HTH


1
一点解释会非常有帮助。 - Sнаđошƒаӽ

4

Visual Studio Code有一个非常好的“全局”搜索和替换功能。我刚刚在多个文件上使用它进行了多行更改,包括一些正则表达式匹配和替换。

  • 打开VS Code
  • 文件→打开文件夹,打开您的文件所在的文件夹
  • 打开一个文件并选择要替换的文本
  • 按CTRL + SHIFT + H打开搜索和替换
  • 如果您选择了文本,则会自动填充,即使是多行文本。否则,输入文本,使用SHIFT + Enter插入新行,并可选地启用正则表达式。
  • 输入替换文本
  • 按Enter开始搜索
  • 单击更改项以并排预览更改
  • 使用“全部替换”按钮(CTRL + ALT + Enter)应用并保存更改

3

只有一个工具可以一次性解决所有问题,那就是Dreamweaver...enter image description here


2

我不能发表评论,但是被接受的解决方案引用了一个似乎有问题的例子。第18行应该是:

s,[/\.*[],\\&,g

s,[/\[.*],\\&,g

后者将在使用现代的sed(或如果您在*BSD中,则为'gsed')时抱怨第18行存在未终止的表达式。

2

另一个过时的答案... - Sharcoux

1

RegexSearch虽然有点丑,但对于这种事情非常有用。


我无法将其用于递归替换给定类型的所有文件。似乎不支持递归。 - codingdave

1
我发现最好用的工具是一个叫做BK ReplaceEm的免费软件。虽然它的界面需要一点时间来适应,但学会如何使用它是值得的。这个工具非常强大,可以让你进行多行替换,无论是否使用正则表达式。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接