一次查找并替换几个不同的值


13

我有一个包含多个实例的文件 Text_1Text1 我需要用这两个字符串替换它们 Text_ATextB 分别。

目前我正在找到的每个文件上执行两个查找和替换功能 Text_1 并替换它 Text_A 和另一个发现 Text1 并替换它 TextB

是否有任何方法可以同时执行此操作而不必两次运行“查找和替换”?

我正在使用Dreamweaver CS3,但我也有Notepad ++,常规记事本,OO Writer,MS Word,如果这些将更容易。理想情况下,我可以在Dreamweaver或Notepad ++中执行此操作,但我愿意下载其他内容以完成工作。我不想做任何命令行工作或创建一个批处理文件(虽然我知道它,我真的不明白)。

如果上面的描述不清楚,让我用这种方式来解释......

我想运行Find&更换 1次 1份文件 我希望它能做到 所有 以下内容中的以下内容替换实例:

  1. Text_1 更换 Text_A
  2. Text1 更换 TextB

我是 尝试跨多个文档进行查找和替换。


如果有不同的模式,可以使用Regexp查找和替换。否则它不可能是@matt
Sathyajith Bhat

Answers:


10

看一眼 桑达 。只需一个命令行即可轻松实现目标

sed -e "s/Text_1/TextA/" -e "s/Text1/TextB/" <your_file.txt>your_file_new.txt


19

从Notepad ++ 6.0开始,实际上没有脚本使用以下技术:

查找:Text_1并替换为:Text_A

查找:文本并替换为:文本

查找:(Text_1)|(Text2)

替换:(?1Text_A)(?2TextB)

一般语法是:

Find: (FindA)|(FindB)|(FindC)...

Replace: (?1ReplaceA)(?2ReplaceB)(?3ReplaceC)...

?1表示第一个捕获的短语,依此类推。

我从以下答案中得到了这个: https://stackoverflow.com/a/16104946/287101


2

你最好运行Find&amp;替换两次,因为你有两个不同的替换发生。但是,处理时间应该很少权衡。考虑以下:

运行查找和;替换一个,按术语搜索术语:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

出于运行目的,我们假设它是线性的并且说它在O(n)时间内运行。

你想找到两个不同的术语。运行Find&amp;替换两次看起来像:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Get Term
  Does term match?  If so, replace term
Get Next Term
...

这将花费O(2x1n)时间,或者是搜索一个术语的两倍。

从理论上看,搜索两个替换的两个术语看起来像:

Get Term
  Does first term match?  If so, replace first term
  Does second term match?  If so, replace second term
Get Next Term
...

获得这些术语并不需要那么多的处理能力,所以基本上你要为每个术语查找两组搜索,给出一个O(1x2n)的时间,运行一次但是搜索两个术语。

虽然您可以节省一些时间不加载每个术语两次,但是您将花费更多时间搜索每个术语两次,因此几乎没有权衡,并且由于此功能的使用频率低于使用一次替换搜索一个术语,因此应用程序开发人员只是假设不写那个功能。

对程序员的免责声明: 这是一个通用的例子。我知道它是   更好,但我想说明原因   功能未找到。


2

使用Notepad ++,你可以

  • 打开包含要替换的单词的所有文件,并在所有打开的文件中使用“查找/替换”

    enter image description here

  • 在文件中使用“查找/替换”

    enter image description here

  • 录制执行查找和替换选项的宏并播放


那不是我想要做的。我不想一次在几个文件上替换它,我想一​​次替换一个文件中的几个字符串。我希望能够运行一个查找和替换,并让它搜索文档并将Text_1的所有实例替换为Text_A,将Text1的所有实例替换为TextB。两个单独的字符串在一个文件中替换为两个单独的值。
matt

图像链接坏了,你有什么机会可以修复它们吗?
Bobby

1
@Bobby修好了,谢谢你让我知道
Sathyajith Bhat

0

Notepad ++中的正则表达式支持受到严格限制。没有交替运营商,就没有希望能够接近你想做的事情。你需要使用 sed 或者是一个具有更好的正则表达式支持的编辑器。

常用表达式语法的常用GNU扩展包括:

  • 的?运算符,意为零或一种;
  • |交替运算符(“foo | bar”匹配“foo”或“bar”)
  • 修饰符如/ g表示贪婪或/ i表示不区分大小写;
  • {a,b}表示a和b之间的某种令牌。
  • (模式)+匹配相同模式的一个或多个匹配

支持Notepad ++的Scitilla组件严格与POSIX兼容,无法识别这些扩展。您可以参考正则表达式获取完整的纲要和一些示例

资源

也可以看看

的GnuWin32 sed 对于Windows


0

我使用TextCrawler进行批量查找和替换。 (我使用Notepad ++在多个文件中进行单个搜索/替换,因为它比Textcrawler更快。)TextCrawler支持正则表达式以及普通搜索/查找。批处理文件可以保存并重新加载以备将来使用。


请参阅 我如何在答案中推荐软件? 特别是,至少要说明从哪里获得软件。
G-Man

批处理功能仅适用于TextCrawler的非免费Pro版本。
Hobbes

0

此外,它可以通过使用ActiveX插件(用于Notepad ++)和执行自定义脚本来完成:

NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")

这有效,但请注意,由于 目前的错误 在ActiveX插件中,每次运行脚本时都会在文件中附加一个NULL字符。
Aidan

-1

这适用于所有数字(从文本/文章中删除所有数字)

  1. 按Ctrl + H打开“查找和替换”对话框。

  2. 在“查找内容”框中,键入^#

  3. 将“替换为”框保留为空。

  4. 全部替换。


1
OP不只是想删除数字,他们想用一个字母替换它。
booyaa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.