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.


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


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


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


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.


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


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.


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")

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.


1
Das OP möchte nicht nur die Zahlen entfernen, sondern sie durch einen Buchstaben ersetzen.
Booyaa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.