Suchen und Ersetzen Sie mehrere verschiedene Werte gleichzeitig

14

Ich habe eine Datei mit mehreren Instanzen von Text_1und Text1und muss beide Zeichenfolgen durch Text_Aund ersetzen TextB.

Derzeit führe ich zwei Funktionen zum Suchen und Ersetzen für jede Datei aus, die sie findet Text_1und ersetzt, Text_Aund die andere, die sie findet Text1und ersetzt TextB.

Gibt es eine Möglichkeit, dies alles auf einmal zu tun, anstatt zweimal "Suchen und Ersetzen" ausführen zu müssen?

Ich verwende Dreamweaver CS3, habe aber auch Notepad ++, regulären Notepad, OO Writer und MS Word, falls dies einfacher sein sollte. Idealerweise könnte ich dies in Dreamweaver oder Notepad ++ tun, aber ich bin offen dafür, etwas anderes herunterzuladen, um die Arbeit zu erledigen. Ich würde es vorziehen, keine Kommandozeilen-Sachen zu machen oder eine Batch-Datei zu erstellen (obwohl mir das bewusst ist, verstehe ich es nicht wirklich).

Falls die obige Beschreibung nicht klar ist, lassen Sie es mich so erklären ...

Ich möchte Find & Replace 1 Mal in 1 Dokument ausführen und möchte, dass es während dieser einen Find & Replace-Instanz ALLE der folgenden Aktionen ausführt:

  1. Suchen Text_1 und Ersetzen durchText_A
  2. Suchen Text1 und Ersetzen durchTextB

Ich versuche nicht , mehrere Dokumente gleichzeitig zu suchen und zu ersetzen.

matt
quelle
Möglicherweise können Sie Regexp zum Suchen und Ersetzen verwenden, wenn ein bestimmtes Muster vorliegt. Sonst ist es nicht möglich @matt
Sathyajith Bhat

Antworten:

10

Schauen Sie sich Sed an . Sie können Ihr Ziel problemlos mit nur einer Befehlszeile erreichen

sed -e "s/Text_1/TextA/" -e "s/Text1/TextB/" <your_file.txt>your_file_new.txt

Tuan Anh Hoang-Vu
quelle
23

Seit Notepad ++ 6.0 ist es tatsächlich ohne Skripte mit folgender Technik möglich:

Suchen Sie: Text_1 und ersetzen Sie durch: Text_A

Suchen Sie: Text2 und ersetzen Sie durch: TextB

Suchen: (Text_1) | (Text2)

Ersetzen: (? 1Text_A) (? 2TextB)

Die allgemeine Syntax lautet:

Find: (FindA)|(FindB)|(FindC)...

Replace: (?1ReplaceA)(?2ReplaceB)(?3ReplaceC)...

? 1 bezieht sich auf die erste erfasste Phrase und so weiter.

Ich habe dies aus der folgenden Antwort erhalten: /programming//a/16104946/287101

Rakaloof
quelle
3

Mit Notepad ++ können Sie entweder

  • Öffnen Sie alle Dateien mit den Wörtern, die Sie ersetzen möchten, und verwenden Sie in allen geöffneten Dateien Suchen / Ersetzen

    Bildbeschreibung hier eingeben

  • Verwenden Sie Suchen / Ersetzen in Dateien

    Bildbeschreibung hier eingeben

  • Zeichnen Sie ein Makro auf, das die Such- und Ersetzungsoptionen ausführt, und geben Sie es wieder

Sathyajith Bhat
quelle
Das versuche ich nicht. Ich möchte nicht mehrere Dateien gleichzeitig ersetzen, sondern mehrere Zeichenfolgen in einer Datei gleichzeitig ersetzen. Ich möchte in der Lage sein, ein Suchen und Ersetzen auszuführen und es das Dokument durchsuchen zu lassen und alle Instanzen von Text_1 durch Text_A und alle Instanzen von Text1 durch TextB zu ersetzen. Zwei separate Zeichenfolgen werden durch zwei separate Werte in einer Datei ersetzt.
Matt
Die Bild-Links sind kaputt. Kannst du sie irgendwie reparieren?
Bobby
2

Sie sollten Find & Replace besser zweimal ausführen, da zwei verschiedene Ersetzungen stattfinden. Es sollte jedoch nur einen sehr geringen Kompromiss bei der Verarbeitungszeit geben. Folgendes berücksichtigen:

Einmal Suchen & Ersetzen ausführen, Begriff für Begriff suchen:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Zum Laufen nehmen wir an, dass es linear ist und sagen, dass dies in O (n) Zeit läuft.

Sie möchten zwei verschiedene Begriffe finden. Das zweimalige Ausführen von Suchen & Ersetzen sieht folgendermaßen aus:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Dies würde O (2x1n) dauern oder doppelt so lange wie die Suche nach einem Begriff.

Die Suche nach zwei Begriffen mit zwei Ersetzungen würde theoretisch so aussehen:

Get Term
  Does first term match?  If so, replace first term
  Does second term match?  If so, replace second term
Get Next Term
...

Das Abrufen der Begriffe erfordert nicht so viel Rechenleistung. Sie suchen also im Wesentlichen nach zwei Suchsätzen für jeden Begriff. Dabei wird eine Zeit von O (1x2n) angegeben, die einmal ausgeführt wird, aber nach zwei Begriffen.

Während Sie Zeit sparen, wenn Sie nicht jeden Begriff zweimal laden, verbringen Sie mehr Zeit damit, jeden Begriff zweimal zu suchen, und da diese Funktion weniger häufig verwendet wird als das Suchen eines Begriffs mit einer Ersetzung, nehmen die Anwendungsentwickler einfach an, dass sie nicht schreiben diese Funktionalität.

HAFTUNGSAUSSCHLUSS FÜR PROGRAMMIERER: Dies ist ein verallgemeinertes Beispiel. Ich weiß, dass es besser ist, aber ich versuche zu zeigen, warum diese Funktion nicht gefunden wird.

Das Ö
quelle
0

Die Unterstützung für reguläre Ausdrücke in Notepad ++ ist stark eingeschränkt. Ohne den Wechseloperator gibt es keine Hoffnung, auch nur annähernd das zu erreichen, was Sie tun möchten. Sie benötigen sedeinen Editor mit besserer Regex-Unterstützung.

Zu den gebräuchlichsten GNU-Erweiterungen der Syntax für reguläre Ausdrücke gehören:

  • das ? Operator, der null oder eins von einer Art bedeutet;
  • die | Wechseloperator ("foo | bar" entspricht entweder "foo" oder "bar")
  • Modifikatoren wie / g für gierig oder / i für Groß- und Kleinschreibung;
  • {a, b}, um eine Art von a und b Token zu bezeichnen.
  • (Muster) +, um eine oder mehrere Übereinstimmungen mit demselben Muster zu erstellen

Die Scitilla-Komponente, die Notepad ++ unterstützt, ist ausschließlich POSIX-kompatibel und erkennt diese Erweiterungen nicht. Sie können reguläre Ausdrücke für eine vollständige Übersicht und einige Beispiele konsultieren

Quelle

Siehe auch

GNUWin32 sedfür Windows

Bis auf weiteres angehalten.
quelle
0

Ich benutze TextCrawler zum Batch-Suchen und Ersetzen. (Ich verwende Notepad ++ zum Suchen / Ersetzen in mehreren Dateien, da es schneller als Textcrawler ist.) TextCrawler unterstützt reguläre Ausdrücke sowie das normale Suchen / Finden. Die Batch-Dateien können gespeichert und für die zukünftige Verwendung erneut geladen werden.

Chris
quelle
Weitere Informationen finden Sie unter Wie empfehle ich Software in meinen Antworten? Sagen Sie zumindest, wo Sie die Software erhalten.
G-Man sagt, dass Monica
Die Batch-Funktion ist nur in der unfreien Pro-Version von TextCrawler verfügbar.
Hobbes
0

Sie können auch das ActiveX-Plugin (für Notepad ++) verwenden und ein benutzerdefiniertes Skript ausführen:

NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")
Valeryan
quelle
Dies funktioniert, aber beachten Sie, dass aufgrund eines aktuellen Fehlers im ActiveX-Plugin bei jeder Ausführung des Skripts ein NULL-Zeichen an die Datei angehängt wird.
Aidan
-1

Dies funktioniert für alle Nummern (um alle Nummern aus dem Text / Artikel zu entfernen)

  1. Drücken Sie Strg + H, um das Dialogfeld Suchen und Ersetzen zu öffnen.

  2. Geben Sie im Feld "Suchen nach" Folgendes ein: ^ #

  3. Lassen Sie das Feld "Ersetzen durch" leer.

  4. Alles ersetzen.

Dennis Smith
quelle
1
Das OP möchte nicht nur die Zahlen entfernen, sondern sie durch einen Buchstaben ersetzen.
Booyaa