Frage

kann am besten helfen, mich systematisch ändern die „ersetzen“ Feld einer regex Suche, wie es jedes Spiel begegnet.

Zum Beispiel, ich habe eine XML-Datei, die den Ausdruck "id = $ number" in regelmäßigen Punkten in dem Text eingefügt benötigt, und im Grunde, $ number ++ jedes Mal, wenn die Regex-Übereinstimmungen (id = 1, ID = 2, usw.) bis zum Ende der Datei.

Ich weiß, ich könnte nur einen Bash / Perl / Python-Skript oder so schreiben, aber ich mag es zumindest mäßig benutzerfreundlich sein, so konnte ich (technisch geneigt, aber weniger) meine intelligenten lehren Arbeiter, wie man sie verwenden und ihre eigenen Änderungen vornehmen. Regexing ist kein Problem für sie.

Die nächstgelegene ich gekommen bin so weit ist Notepad ++ 's Spalteneditor und ‚Erhöhung [Zahl] durch‘ Funktion, aber mit diesem habe ich eine separate regex schreiben alles auszurichten, fügen Sie die einzelnen Schritte, und dann noch schreiben sie setzen zurück. Leider muß ich auf zu vielen verschiedenen Arten von Dateien, um diese Funktion zu nutzen und ‚s ersetzen, um Makros möglich zu machen.

Im Idealfall würde das Programm auch für Windows & Linux verfügbar sein (WEIN ist akzeptabel, aber heimisch ist viel bevorzugt), und eine ‚VI / VIM-Eingang‘ Option (wenn es sich um ein Texteditor ist), aber diese sind von Sekundär Bedeutung.

Natürlich wäre es schön, wenn es eine OSS-Lösung ist, und ich würde mich freuen, $ 20- $ 50 in dem Entwickler zu spenden (n), wenn es um die Lösung bietet, die ich suche.
< br> Wir entschuldigen uns für die Länge, und vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Emacs (Version 22 und höher) können tun, was Sie suchen. Siehe Steve Yegge Blog für eine wirklich interessant zu lesen darüber. Ich denke, das sollte funktionieren:

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

\# ist eine spezielle metacharacter, die von der Gesamtzahl des Ersatzes ersetzt werden, die bisher aufgetreten sind, ausgehend von 0. Wenn Sie die Liste wollen von 1 statt 0 zu starten, verwenden Sie die folgende Ersatzzeichenfolge:

id = \,(1+ \#)

Andere Tipps

JEdit können Sie wahrscheinlich helfen: http://www.jedit.org/

können Sie alle Arten von regex tun und sogar Bohnen Ergebnis basiert damit zu ersetzen.

UltraEdit32 ist großartig und ich glaube, dass es die Funktionen, die Sie benötigen. Es gibt einen kostenlosen 30-Tage-Download, so dass Sie sicherstellen können. :)

Ich weiß, dass Sie eine App auf Windows / Linux verfügbar sein sollen, aber es ist eine andere Lösung auf dem Mac: TextWrangler , und es ist kostenlos.

Hier finden Sie aktuelle UltraEdit32 . Es ist sehr gut. Nicht kostenlos, aber in Windows, Linux und Mac-Plattformen. Es hat regex basierte Suchen & Ersetzen.

Das Skript rel="nofollow lassen sollten Sie tun, was Sie wollen in < a href = "http://www.vim.org" rel = "nofollow noreferrer"> Vim .

Vim Funktionen können die fortlaufende Nummer Trick tun und sind nicht allzu schwer zu schreiben. Zum Beispiel des Vim Wiki sagt, wie dies zu tun. Siehe auch :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

Wir haben wahrscheinlich an dieser Stelle lange hinter Benutzerfreundlichkeit verlassen, aber Vims Ruby-Unterstützung diese Art der Sache leicht tun:

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

oder Perl:

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

Für mich das klingt wie es ein Job für awk sein könnte, anstatt ein Job für einen Editor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top