
Ich möchte komplexe Suchen- und Ersetzungsvorgänge mit Notepad++ über die Befehlszeile durchführen. Ich habe im Internet viele Lösungen gefunden, aber keine davon entspricht meinen Anforderungen.
Ich habe eine Datei, in der ich Regex-Suchen und Ersetzen durchführen möchte
Eine weitere Datei mit Regex-Zeichenfolgen (sowohl „Suchen mit“ als auch „Ersetzen mit“. Ich kann damit herumspielen, um zwei separate Dateien oder was auch immer zu erstellen.)
Bitte geben Sie auch eine Anleitung, wie Sie in dieser Datei Regex-Such- und Ersetzungszeichenfolgen platzieren, wenn die obige Aufgabe ausgeführt werden kann.
Bearbeiten
Gibt es ein PCRE-kompatibles Suchen- und Ersetzen-Dienstprogramm für Windows?
Antwort1
Es gibt den Windows-Befehl „findstr“, aber dieser kann nicht ersetzen und bietet nur eingeschränkte Regex-Unterstützung. Sehen Sie sich außerdem an, wie es mit *nix geht, und verwenden Sie diese Tools dann in Windows. So können Sie grep und sed für Windows erhalten.
Einige Batch-Benutzer verwenden möglicherweise ein Tool (möglicherweise vom Batch-Experten Dave Benham), das Microsoft JScript mit Batch zusammenführt und über Such- und Ersetzungsoptionen verfügt. Ich denke, das ist perfekt, wenn Sie ein sehr gesperrtes System haben und nicht einmal eine EXE herunterladen können. Aber ansonsten ist das Herunterladen oder Kopieren/Einfügen eines Skripts fast so, als würde man ein Drittanbieterprodukt verwenden, und es gibt bereits Tools wie Grep und Sed, die weit verbreitet sind und für Windows heruntergeladen werden können.
Es *?
handelt sich um eine verzögerte Auswertung, die etwas fortgeschritten ist und -P (PCRE – Perl-kompatible reguläre Ausdrücke) erfordert.
C:\>echo abccccdd| grep -oP "a.*?c"
abc
C:\>
Sie können -P bei Bedarf entfernen, wenn der reguläre Ausdruck weniger fortgeschritten ist. Ich behalte es jedoch.
Sed geht nicht so weit wie PCRE, unterstützt aber das, was bei diesen Befehlszeilenprogrammen die nächstbeste Lösung zu sein scheint: ERE (erweiterte reguläre Ausdrücke). Die Verwendung von sed mit -r kann Ihnen die Verwendung überflüssiger Backslashes ersparen. Als ich das letzte Mal nachgesehen habe, verwendete es ohne -r BRE (einfache reguläre Ausdrücke).
Das bedeutet, dass die Regex-Übereinstimmung durch nichts ersetzt wird.
C:\>echo abccccdd| sed -r "s/c{2,3}//"
abcdd
Dieser /g-Modifikator führt eine globale Suche und Ersetzung durch und ersetzt nicht nur die erste Übereinstimmung
C:\>echo abacacda| sed "s/a//g"
bccd
Sie können es mit gnuwin32 abrufen oder von Cygwin aus verwenden. Verwenden Sie dann jedoch einfache Anführungszeichen. Wenn Sie Cygwin verwenden, ist es besser, dies von der Cygwin-Shell aus zu tun, z. B. von der Bash-Shell von Cygwin.
Dieser Befehl kann offensichtlich auf Dateien angewendet werden.
C:\>type a.a
asdf
C:\>
C:\>grep -o a a.a
a
C:\>sed "s/a/z/" a.a
zsdf
C:\>
Oder Perl
grep sucht und ersetzt nicht. Sed tut das, obwohl sed PCRE nicht unterstützt (zumindest nicht das sed, das ich habe). Eine andere Möglichkeit ist Perl. Perl-Regexes sind so gut wie PCRE, wenn nicht sogar besser. Schauen Sie hierhttps://stackoverflow.com/questions/4794145/perl-one-liner-like-grepund sehen Sie, dass dieser Link erwähnt wirdPerl zum Abgleichen mit regulären Ausdrücken im Terminal?siehe meine Antwort dort, es hat Perl-Formen von grep und sed, und Sie werden große regex Unterstützung mit Perl offensichtlich haben
Wenn Sie sich meine Antwort unter dem zweiten Link ansehen (wie gesagt), sehen Sie, dass ich dort Perl in Cygwin habe und verwende und auch, wie es verwendet werden kann.