我正在寻找一个应用程序/文本编辑器

时间:2009-04-15 01:47:04

标签: regex replace increment

可以帮助我系统地修改正则表达式搜索的“替换”字段,因为它遇到每个匹配。

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

我知道我可以写一个bash / perl / python脚本或其他类似的东西,但我希望它至少适度用户友好,所以我可以教我的智能(但技术上不太倾向)的工作者如何使用它并进行自己的修改。 Regexing对他们来说不是问题。

我到目前为止最接近的是Notepad ++的列编辑器和'增加[数字] by'函数,但是我必须编写一个单独的正则表达式来对齐所有内容,添加增量,然后写另一个来放置它背部。不幸的是,我需要在太多不同类型的文件上使用此函数,并且'替换'以使宏可行。

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

当然,如果有一个OSS解决方案会很好,如果它能提供我正在寻找的解决方案,我很乐意向开发者捐赠20到50美元。

道歉,并非常感谢你的帮助!

8 个答案:

答案 0 :(得分:8)

emacs(版本22及更高版本)可以满足您的需求。请参阅Steve Yegge's blog以获取有关它的真正有趣的读物。我认为这应该有效:

M-x replace-regexp
  Replace regexp: insert pattern regexp here
  Replace regexp with: id = \#

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

id = \,(1+ \#)

答案 1 :(得分:2)

JEdit可能会帮助你: http://www.jedit.org/

你可以做各种正则表达式甚至bean结果替换它。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我知道您希望在Windows / Linux上提供应用程序,但Mac上还有另一种解决方案:TextWrangler,它是免费的。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

script可让您在Vim中执行所需操作。

答案 6 :(得分: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

答案 7 :(得分:0)

对我而言,听起来这可能是awk的工作,而不是编辑的工作。