Regex Ersetzen von der Kommandozeile

21

Ist es möglich, reguläre Ausdrücke über die Befehlszeile zu ersetzen? Im Moment benutze ich dazu Notepad ++. In Kommandozeile kann ich FINDSTR nur Wich kann das mached Dateien / Zeilen nur orten

EDIT:
Vielleicht wird es möglich sein , ein VB - Skript zu machen und es von cmd laufen? Ich habe gerade eine Datei "hi.vbs" mit dem Inhalt erstellt

Msgbox "Hi Buddy"

Dann kann ich es mit cmd direkt ausführen, indem ich in der Befehlszeile "hi" eingebe.
Wenn es mit Batch-Skript nicht möglich ist, verwende ich möglicherweise ein VB-Skript durch Batch. Oder..?

Aziz
quelle
Am Ende setzen Sie einen nicht schlüssigen Satz und der gesamte EDIT-Teil zeigt nicht auf das Problem, sondern lautet: "Ich erstelle eine Hallo-Welt in vb. Kann ich so etwas im Batch erstellen? Überprüfen Sie die Antwort von @IanPugsley ist die einfache Möglichkeit, Regex-Ersetzen zu tun
mjsr
@Aziz: Hat eine dieser Antworten für Sie funktioniert? Wenn ja, würden Sie das akzeptieren? Das ist ein Teil der Teilnahme an dieser Community. So wie wir uns gegenseitig für die Hilfe danken. Die Reputationspunkte, die für eine akzeptierte Antwort vergeben wurden, helfen anderen Benutzern dabei, die Erfahrungen der anderen Benutzer einzuschätzen. Vielen Dank.
JRobert
Ich dachte, etwas wie MYVBREPLACE (.vbs) FILENAME REGEXPATTERN REPLACEMENT über die Befehlszeile aufzurufen.
Aziz

Antworten:

11

gehe hier
http://gnuwin32.sourceforge.net/packages.html
scrolle runter zu SED. Laden Sie coreutils auch herunter, während Sie gerade dabei sind.

Dieser Befehl ersetzt global und in jeder Zeile a durch b. Also nicht nur das erste Mal in der Leitung.

zB mit sed "s / a / b / g" a.txt

C:\>type a.txt
aaaa
aaa

C:\>sed "s/a/b/" a.txt
baaa
baa

C:\>sed "s/a/b/g" a.txt
bbbb
bbb

C:\>

VBScript unterstützt reguläre Ausdrücke. Sie können sie suchen und ersetzen.

dim re, s
set re = new RegExp

re.Pattern="in"
re.Global=True 'false is default
s="bin din in"
MsgBox re.Replace(s,"xxx")

Zeigt bxxx dxxx xxx an

barlop
quelle
Erstaunliches verrücktes Werkzeug !!! Dieses Tool wurde zu weiterentwickelt. Ich konnte es noch nicht verwenden, aber wenn ich gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command lese, kann ich sehen, dass dies viel mehr kann, als ich erwarten könnte. Vielen Dank
Aziz
Neue Versionen von bash können auch reguläre Ausdrücke ausführen. Manchmal ist dies für einfache Aufgaben ausreichend und es ist nicht erforderlich, auch sed zu verwenden.
vtest
und wieder was vtest gesagt hat, falls jemand es nicht weiß. Cygwin hat Bash.
Barlop
sed saugt mit Multi-Line ersetzt obwohl
Kofifus
1
@KennyEvitt cmd Shell ein zwicken erfordert , um es anzuzeigen und die Verwendung von chcp für Unicode UTF - 8 chcp 65001 (wie Sie sagen, utf16 encoding.chcp 1200 und chcp 12001 wird nicht unterstützt) stackoverflow.com/questions/9321419/... Nicht sicher re Minze. Ich bin nicht sicher, ob es sich um eine PowerShell handelt. Aber utf-8 wird in cmd oder Powershell unterstützt. Solange eine unterstützende Schriftart wie eine neue Courier-Schriftart verwendet wird, und solange es sich um die Codepage 65001 handelt. Für eine utf16-Codierung gibt es ein cmd / u.
Barlop
26

Ich habe ein kostenloses Befehlszeilentool für Windows geschrieben, um dies zu tun. Es heißt rxrepl und unterstützt die Unicode- und Dateisuche. Einige mögen es für ein nützliches Werkzeug halten.

rxrepl ist ein Microsoft Windows-Befehlszeilentool zum Suchen und Ersetzen von Text in Textdateien mit Perl-kompatiblen regulären Ausdrücken (PCRE).

Es hat die folgenden Eigenschaften:

  • Suche mit Perl-kompatiblen regulären Ausdrücken
  • Verwenden Sie die Gruppenübereinstimmung im Ersetzungstext
  • Unterstützt Windows- und Unix-Zeilenenden
  • Unicode-Unterstützung
  • Akzeptiert mehrere Argumente zum Suchen / Ersetzen
  • Optionen können in einer Optionsdatei angegeben werden
  • Nach Dateien suchen
  • Vorschau Modus
  • Zeilen- und vollständige Dateivergleichsmodi

Bildbeschreibung hier eingeben

user2005187
quelle
4
Das ist großartig! Wenn Sie wie die Beispiele mich und brauchen, ist dieses ersetzt "foobar" mit "Foofighters" in einer Datei: rxrepl.exe -f file.txt -a -s "(foo) bar" -r "\ 1fighters"
Dunc
1
Würden Sie die Quelle auch auf so etwas wie Github haben? Völlig verständlich, wenn es nicht Open Source sein soll, aber ich bin sehr neugierig.
KayleeFrye_onDeck
1
@Steztric Wirklich? Ich verwende 64-Bit-Fenster und habe anscheinend keine Probleme, C:\WINDOWS\System32\cmd.exe
wenn
1
Super Werkzeug! Läuft ohne Probleme unter Windows Server Std 2012 R2 x64. Danke!
kwrl
2
Tolles Tool, ich hoffe, Sie halten es noch aufrecht
wässrig
12

Der Scripting Guy erklärt, wie dies in PowerShell gemacht wird (keine zusätzlichen Downloads auf den neuesten Windows-Betriebssystemen, Sie haben es wahrscheinlich bereits installiert).

Starten Sie es und führen Sie Folgendes aus (um a *durch a zu ersetzen @):

(Get-Content C:\Scripts\Test.txt) | 
Foreach-Object {$_ -replace "\*", "@"} | 
Set-Content C:\Scripts\Test.txt

Dies unterstützt reguläre .NET-Ausdrücke , einschließlich positiver und negativer Look-Ahead- Ausdrücke , und Notepad ++ wurde mit Regex vor Version 6.x nicht unterstützt (so sehr ich Notepad ++ liebe).

Ian Pugsley
quelle
1
Notepad ++ unterstützt volle PCRE ab Version 6.
Bob
5

Ich habe fnr.exe dafür gefunden. Es hat GUI und Kommandozeile.

Ein Open Source-Tool zum Suchen und Ersetzen von Text in mehreren Dateien.

Eigenschaften

  • Einzelne Datei herunterladen - fnr.exe (127kb)
  • Ersetzen Sie Text in mehreren Dateien mithilfe der Windows-Anwendung oder über die Befehlszeile
  • Nur suchen, um zu sehen, wo Übereinstimmungen gefunden werden
  • Suche nach Groß- und Kleinschreibung
  • Suchen nach Dateien in einem Verzeichnis oder in wiederkehrenden Unterverzeichnissen
  • Reguläre Ausdrücke
  • Suchen und Ersetzen von mehrzeiligem Text
  • Befehlszeilenschaltfläche generieren, um Befehlszeilentext für die Batchdatei zu erstellen
  • Befehlszeilenhilfe
  • Unit-Tests von Motor suchen / ersetzen

Befehlszeilenoptionen anzeigen

Bildbeschreibung hier eingeben

Sergius
quelle
1
Ziemlich gut - Sie können Ihre "find" -Anweisung in der GUI überprüfen, auf "Gen Replace Command Line" klicken und sich auf die Verwendung des Befehlszeilenaufrufs vorbereiten. Sie müssen keine Zeit aufwenden, um sich mit der Befehlszeilensyntax vertraut zu machen.
sarh
Ich habe es nicht geschafft, dies zu beenden, nachdem ich die Änderungen vorgenommen habe. Ich muss die Eingabetaste drücken, um das Fenster zu schließen, was für Skripterstellung nicht besonders nützlich ist
G-.
@G-. Es wird nicht auf <enter> gewartet, wenn es von einer Batch-Datei ausgeführt wird.
Sergius
Ich konnte keinen Weg finden, um unter einem anderen Dateinamen / einer anderen Erweiterung auszugeben
Rick
4

Sieht aus wie Sie Regex mit FINDSTR verwenden können

findstr [Windows CMD] :

Mit findstr kann nach Text gesucht werden (wie in der Datei mit dem Muster angegeben). Wenn der Dateiname Platzhalter (* oder?) enthält, werden alle übereinstimmenden Dateien durchsucht. Mit der Option / S wird sowohl im aktuellen Verzeichnis als auch gesucht Wenn das Muster Leerzeichen enthält, muss es wie folgt angegeben werden: / C: "Zu durchsuchender Text" Um das Muster in reguläre Ausdrücke umzuwandeln, muss die Option / R verwendet werden unempfindlich.

Aus der FindStr-Hilfe ( Findstr /?):

/ R - Verwendet Suchzeichenfolgen als reguläre Ausdrücke.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurrences of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of word
  xyz\>    Word position: end of word
p0rkjello
quelle
Vielen Dank für Ihre Antwort, aber das war nicht meine Frage.
Aziz
2
findstrkann keinen Text in Dateien ersetzen!
Kenny Evitt
4

Ich bin ein bisschen spät dran , aber JREPL.BAT ist ein hybrides, auf JScript / Batch-Skripten basierendes Regex-Dienstprogramm , das auf jedem Windows-Computer ab XP ausgeführt werden kann.

Das Skript enthält eine vollständige Dokumentation, auf die über zugegriffen werden JREPL /?kann oder die JREPL /??für die Seitenausgabe verwendet werden kann.

JREPL verwendet Standard-ECMA-Regex, der mit JScript geliefert wird. ECMA-Regex ist nicht ganz so leistungsfähig wie das für Powershell verfügbare .NET-Regex, aber es ist immer noch verdammt gut. Und ich denke, der durchschnittliche Benutzer wird dieses Dienstprogramm einfacher als Powershell zu verwenden finden.

Die eingebauten JREPL-Optionen bieten bereits viel Eigenleistung, aber die Möglichkeit, vom Benutzer bereitgestelltes JScript zu injizieren, eröffnet wirklich erstaunliche Möglichkeiten.

Ich habe das Skript entwickelt, weil auf meinem Arbeitsplatz keine nicht standardmäßigen exe-Dateien heruntergeladen werden können, aber keine Einschränkungen beim Schreiben von Batch- oder JScript-Skripten bestehen :-)

Folgen Sie einfach dem Link und kopieren Sie den Skriptcode in eine Datei mit dem Namen JREPL.BAT. In den nachfolgenden Beiträgen dieses Threads finden Sie Beispiele für die Verwendung und den Entwicklungsverlauf. Es gibt auch viele StackOverflow-Antworten, die JREPL.BAT verwenden.

dbenham
quelle
3

Zwei gute Optionen sind entweder Cygwin, wodurch Sie eine Unix-ähnliche, bash-ähnliche Umgebung erhalten (Alternative zu cmd.exe). und Unxutils , Win32-Ports einer Sammlung einzelner Unix-Dienstprogramme. In beiden Paketen finden Sie "sed", "awk" und "grep".

JRobert
quelle
2
unxutils ist alt. jetzt ist das ding gnuwin32
barlop 04.10.11
Vielen Dank JRobert für Ihren Vorschlag. Tut mir leid, dass ich es nicht verstanden habe, aber jetzt kann ich sehen, dass SED das Ding war.
Aziz
@barlop ab 2018 ist gnuwin32 nun auch alt .. cygwin ist aktueller!
Barlop
0

Sie können GSAR auch zum Suchen und Ersetzen in der Befehlszeile verwenden. Funktioniert auch mit Hex und Binär. Es erledigt nicht das komplexe, schwere Heben, das Regex ausführen kann, aber für das einfache Suchen und Ersetzen erledigt es die Arbeit schnell und einfach.

Sonne
quelle