615 Stimmen

Wie können Sie mit der Windows-Befehlszeilenumgebung Text in einer Datei suchen und ersetzen?

Ich schreibe ein Stapeldatei-Skript mit der Windows-Befehlszeilenumgebung und möchte jedes Vorkommen eines Textes in einer Datei (z. B. "FOO") durch einen anderen (z. B. "BAR") ersetzen. Wie lässt sich das am einfachsten bewerkstelligen? Gibt es eingebaute Funktionen?

7voto

Jay Punkte 40418

Werfen Sie einen Blick auf Gibt es ein sed-ähnliches Dienstprogramm für cmd.exe die nach einem sed-Äquivalent unter Windows fragte, sollte auch für diese Frage gelten. Zusammenfassung:

  • Es kann in einer Batch-Datei gemacht werden, aber es ist nicht schön
  • Es gibt viele ausführbare Programme von Drittanbietern, die diese Aufgabe für Sie übernehmen, wenn Sie den Luxus haben, eine exe-Datei zu installieren oder einfach zu kopieren.
  • Kann mit VBScript oder ähnlichem gemacht werden, wenn Sie etwas brauchen, das auf einem Windows-Rechner ohne Änderungen usw. läuft.

6voto

foxidrive Punkte 38990

Zwei Batch-Dateien, die Folgendes liefern search and replace Funktionen wurden von Stack Overflow-Mitgliedern geschrieben dbenham y aacini mit native built-in jscript in Windows.

Sie sind beide robust y very swift with large files im Vergleich zum einfachen Batch-Skripting, und auch simpler für das einfache Ersetzen von Text zu verwenden. Sie haben beide Windows regular expression Mustervergleich.

  1. Ce site sed-like Hilfsbatchdatei heißt repl.bat (von dbenham).

    Beispiel für die Verwendung des L buchstäblicher Wechsel:

    echo This is FOO here|repl "FOO" "BAR" L
    echo and with a file:
    type "file.txt" |repl "FOO" "BAR" L >"newfile.txt"
  2. Ce site grep-like Hilfsbatchdatei heißt findrepl.bat (von aacini).

    Beispiel, bei dem reguläre Ausdrücke aktiv sind:

    echo This is FOO here|findrepl "FOO" "BAR" 
    echo and with a file:
    type "file.txt" |findrepl "FOO" "BAR" >"newfile.txt"

Beide werden zu leistungsstarken systemweiten Dienstprogrammen when placed in a folder that is on the path oder kann im selben Ordner mit einer Batch-Datei oder über die cmd-Eingabeaufforderung verwendet werden.

Sie haben beide case-insensitive Schalter und auch viele andere Funktionen.

5voto

kool_guy_here Punkte 59

Power-Shell-Befehl funktioniert einwandfrei

(
test.txt | ForEach-Object { $_ -replace "foo", "bar" } | Set-Content test2.txt
)

5voto

Peter Schuetze Punkte 15915

Ich bin zwar etwas spät dran, aber ich bin häufig auf der Suche nach ähnlichen Dingen, da ich mich nicht mit der Genehmigung von Software abmühen möchte.

In der Regel verwenden Sie die FOR-Anweisung jedoch in verschiedenen Formen. Jemand hat eine nützliche Batch-Datei erstellt, die eine Suche und Ersetzung durchführt. Schauen Sie mal aquí . Es ist wichtig, dass Sie die Einschränkungen der bereitgestellten Batch-Datei verstehen. Aus diesem Grund kopiere ich den Quellcode in dieser Antwort nicht.

5voto

eQ19 Punkte 8782

Ich bevorzuge die Verwendung von sed de GNU-Dienstprogramme für Win32 sind die folgenden Punkte zu beachten

  • einziges Zitat '' funktioniert unter Windows nicht, verwenden Sie "" stattdessen
  • sed -i wird unter Windows nicht funktionieren, es braucht eine Datei Tauschen

Der Arbeitscode von sed zum Suchen und Ersetzen von Text in einer Datei in Windows ist wie folgt

sed -e "s/foo/bar/g" test.txt > tmp.txt && mv tmp.txt test.txt

4 Stimmen

Bevor Windows-Benutzer sofort Dateien austauschen: Neuere Versionen von sed unterstützen die Bearbeitung an Ort und Stelle mit -i ! Wenn Ihre sed-Version dies tut, dann prüfen Sie den Befehl aus dieser Antwort: stackoverflow.com/a/33762001/2492801 .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X