2009-04-15 5 views
4

может наилучшим образом помочь мне систематически изменить поле «заменить» поиска регулярных выражений, когда он встречает каждое совпадение.Я ищу приложение/текстовый редактор, который

Например, у меня есть xml-файл, который нуждается в фразе «id = $ number», вставленной в обычные точки в тексте, и в основном, $ number ++ каждый раз, когда регулярное выражение совпадает (id = 1, id = 2 и т. Д.).) до конца файла.

Я знаю, что могу просто написать сценарий bash/perl/python или некоторые из них, но я бы хотел, чтобы он был, по крайней мере, умеренно удобен, поэтому я мог бы научить моих умных (но менее технически настроенных) работников использовать его и внести свои изменения. Regexing не является проблемой для них.

Ближайший, к которому я пришел, - это редактор столбцов «Блокнот ++» и функция «увеличить [число]», но с этим мне нужно написать отдельное регулярное выражение, чтобы выровнять все, добавить приращения, а затем записать другой его обратно. К сожалению, мне нужно использовать эту функцию для слишком большого количества различных типов файлов, а «replace» - сделать макросы выполнимыми.

В идеале программа также будет доступна как для Windows & Linux (WINE является приемлемым, но родным является очень предпочтительным), и имеет параметр «VI/VIM input» (если это текстовый редактор), но это вторичное значение.

Конечно, было бы неплохо, если бы было решение OSS, и я был бы рад пожертвовать разработчику (-ам) $ 20-50, если он предоставит решение, которое я ищу.


Извинения за длину и большое спасибо за помощь!

ответ

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

«О да! Хороший ол» C-x M-c M-бабочка ... »http://xkcd.com/378/ Оригинальный плакат здесь. Большое спасибо за ваше предложение! Очевидно, что мой пристрастие к Emacs ослепил меня, но я попробую его позже сегодня вечером (скачать его сейчас ... arrrrgh!). Моя единственная забота - это недружелюбие пользователя - пальцы скрещены! – chameleon3

+0

ну, упрямый человек ВМ на этот раз набросит свою шляпу на Emacs. Престижность и большое спасибо вам - она ​​работает как рекламируемая. Интерфейс и ярлыки немного привыкнут, но я могу создать некоторые настраиваемые привязки клавиш, да? Еще раз спасибо! – chameleon3

2

JEdit, вероятно, может помочь вам: http://www.jedit.org/

вы можете сделать все виды регулярных выражений и даже результат боба на основе замены с ним.

+0

Hi, оригинальный постер здесь. Спасибо за предложение! Я часто использую Jedit, и регулярное выражение действительно приятно, но я не знаю никакой такой функции с beanshell - можете ли вы или кто-нибудь указать мне в правильном направлении? – chameleon3

+0

Чтобы ответить на ваш вопрос: http://www.jedit.org/users-guide/search-replace.html#id2558292 – Axeman

+0

Да, я узнал о beanshell перед обоими из предоставленной вами ссылки и http: //www.jedit. org/users-guide/writing-macros-part.html К сожалению, я до сих пор не нашел простого решения исходной проблемы. Я надеюсь, что это существует, потому что Jedit является одним из трех редакторов, которые я использую чаще всего. – chameleon3

0

Посмотрите на UltraEdit32. Это очень хорошо. Не бесплатный, но доступный на платформах Windows, Linux и Mac. Он имеет регулярный поиск & заменить.

+0

Великие мысли думают одинаково. :) У них действительно есть linux/mac now too tho! –

+0

Прохладный! Не знал, что ... Прошло много времени с тех пор, как я перестал использовать UltraEdit32 и переключился на Notepad ++. Но соглашайтесь с вами: UltraEdit32 - отличный редактор. Переход к изменению моего сообщения, чтобы отразить версии Linux/Mac. Благодаря! –

1

UltraEdit32 Отлично, и я считаю, что у него есть функции, которые вам нужны. Существует бесплатная 30-дневная загрузка, поэтому вы можете убедиться. :)

1

Я знаю, что вам нужно приложение, доступное в Windows/Linux, но есть другое решение на Mac: TextWrangler, и это бесплатно.

+0

TextWrangler - это потрясающе! –

+0

Hello, оригинальный постер здесь. Спасибо за предложение! Я был поклонником BBedit и TextWrangler в течение многих лет, но опять же, никто в моей лаборатории не использует mac :-(Кроме того, я не знаком с какой-либо функцией increment на Textwrangler ... что это такое? – chameleon3

0

Этот script должен позволить вам делать то, что вы хотите, в Vim.

+0

Здравствуйте, оригинал плакат здесь. Спасибо за предложение! Я не сомневаюсь, что он будет работать как рекламируемый, но, к сожалению, это, вероятно, слишком сложно для моих работников :-(Я обязательно зарегистрирую его для собственного использования! – chameleon3

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 c=0 
:rubydo $_.gsub!(/<\w+/){|m| c += 1; m + ' id="' + c.to_s + '"'} 

Или Perl:

:perl $c=1 
:perldo s/<\w+/$& . ' id="' . $c++ . '"'/eg 
+0

Привет, оригинальный плакат здесь. Спасибо за предложения! Все выглядят так, как будто они делают трюк, но я просто в восторге. Я научил их регулярному выражению, и они могут запускать firefox в KDE. Их работа не требует серьезных компьютерных навыков, поэтому я подумайте, что их глаза будут глазироваться над этим: p – chameleon3

0

Для меня это звучит так, как будто это может быть работа для awk, а не работа для редактора.

+0

Привет, оригинальный плакат здесь. Спасибо за предложение! Я согласен с тем, что awk/grep/sed в конечном итоге будет работать хорошо, но, опять же, я боюсь, что слишком много нужно просить мои работники. – chameleon3