4

可以最好地帮助我在遇到每个匹配项时系统地修改正则表达式搜索的“替换”字段。

例如,我有一个 xml 文件,它需要在文本中的常规点插入短语“id = $number”,基本上,每次正则表达式匹配(id = 1,id = 2 等)时,$number++ 直到结束的文件。

我知道我可以只写一个 bash/perl/python 脚本或类似的脚本,但我希望它至少对用户友好,这样我就可以教我的聪明(但技术上不太倾向)的员工如何使用它和进行自己的修改。正则表达式对他们来说不是问题。

到目前为止,我最接近的是 Notepad++ 的列编辑器和“增加 [number] by”函数,但是我必须编写一个单独的正则表达式来对齐所有内容,添加增量,然后再写一个将其放回原处。不幸的是,我需要在太多不同类型的文件上使用此功能并“替换”以使宏可行。

理想情况下,该程序也可用于 Windows 和 Linux(可接受 WINE,但首选原生),并具有“VI/VIM 输入”选项(如果它是文本编辑器),但这些是次要的。

当然,如果有 OSS 解决方案就更好了,如果它提供了我正在寻找的解决方案,我很乐意向开发人员捐赠 20-50 美元。


为篇幅道歉,非常感谢您的帮助!

4

8 回答 8

8

emacs(版本 22 及更高版本)可以满足您的需求。请参阅Steve Yegge 的博客,了解有关它的非常有趣的内容。我认为这应该有效:

Mx 替换正则表达式
  替换正则表达式:在此处插入模式正则表达式
  将正则表达式替换为:id = \#

\#是一个特殊的元字符,它被迄今为止发生的替换总数替换,从 0 开始。如果您希望列表从 1 而不是 0 开始,请使用以下替换字符串:

id = \,(1+ \#)
于 2009-04-15T01:50:46.610 回答
2

JEdi​​t 或许可以帮助您: http: //www.jedit.org/

您可以使用它进行各种正则表达式甚至基于 bean 结果的替换。

于 2009-04-15T01:51:47.887 回答
1

UltraEdit32很棒,我相信它具有您需要的功能。有 30 天的免费下载,因此您可以确保。:)

于 2009-04-15T01:52:22.580 回答
1

我知道你想要一个在 Windows/Linux 上可用的应用程序,但在 Mac 上还有另一个解决方案:TextWrangler,而且它是免费的。

于 2009-04-15T02:17:47.433 回答
0

看看UltraEdit32。这很好。不是免费的,但可在 Windows、Linux 和 Mac 平台上使用。它具有基于正则表达式的搜索和替换。

于 2009-04-15T01:52:11.427 回答
0

这个脚本应该让你在Vim中做你想做的事。

于 2009-04-15T02:47:37.613 回答
0

Vim 函数可以实现递增数字的技巧,而且编写起来并不难。例如,Vim wiki说明了如何做到这一点。另请参阅:h sub-replace-\=

function! Counter()
    let i = g:c
    let g:c = g:c + 1
    return i
endfunction

:let c=1|%s/<\w\+\zs/\=' id="' . Counter() . '"'/g

在这一点上,我们可能已经把用户友好性远远抛在了后面,但是 Vim 的 Ruby 支持也可以轻松地完成这种事情:

:ruby c=0
:rubydo $_.gsub!(/<\w+/){|m| c += 1; m + ' id="' + c.to_s + '"'}

或 Perl:

:perl $c=1
:perldo s/<\w+/$& . ' id="' . $c++ . '"'/eg
于 2009-04-15T03:30:48.460 回答
0

对我来说,这听起来像是 awk 的工作,而不是编辑的工作。

于 2009-04-15T03:33:14.070 回答