Entfernen multi-line-strings aus einer Textdatei per batch-Skript
Ich versuche eine batch Datei erstellen, das Bearbeiten einer text-Datei zu entfernen, Zeilen mit einem bestimmten string und entfernen Sie die Zeile direkt danach.
Ein Beispiel für diese Datei würde wie folgt Aussehen:
LINE ENTRY KEEP_1 BLA BLA ENDE LINE ENTRY REMOVE_1 FOO BAR ENDE LINE ENTRY REMOVE_2 HALLO WELT ENDE LINE ENTRY KEEP_2 KATZE HUND ENDE
Nach dem ausführen der batch-script benötige ich die neue Datei enthalten
LINE ENTRY KEEP_1 BLA BLA ENDE LINE ENTRY KEEP_2 KATZE HUND ENDE
wo jede Zeile mit REMOVE_ gelöscht wurde, sowie den entsprechenden "ENDE" - Zeile.
Habe ich versucht mit der Technik gefunden hier entfernen Sie die Zeilen, die den string aber es scheint nicht möglich zu sein, gehören Zeichen wie \r\n zu prüfen und umfassen das 'ENDE' in die Suche ein. Ich kann dies nicht als 2 seperate FINDSTR-Befehle, wie ich immer noch das 'ENDE' text gehalten werden, für die beiden anderen Einträge.
Mit findstr /v REMOVE_
lässt mich mit den folgenden:
LINE ENTRY KEEP_1 BLA BLA ENDE ENDE ENDE LINE ENTRY KEEP_2 KATZE HUND ENDE
und mit findstr /v "REMOVE_*\r\nEnd"
scheint nicht, überhaupt zu arbeiten.
Nur um zu bestätigen, jede Zeile ist definitiv beendet mit \r\n
.
Jede Hilfe zu diesem Thema würde sehr geschätzt werden.
- Sind Sie absolut gezwungen, an einem batch-Skript? Könnten Sie verwenden, awk, zum Beispiel?
- Ich bin nicht beschränkt auf die batch, aber diese Datei kann ausgeführt werden müssen, die auf eine Reihe von verschiedenen Maschinen, so würde ich mag zu halten Abhängigkeiten auf ein minimum, wenn möglich. Im Idealfall entweder batch oder VBS, denke ich.
- In diesem Fall würde ich vorschlagen, VBS, da Sie wahrscheinlich weniger sorgen, dass Weg. Ich bin mir nicht ganz sicher, es kann nicht getan werden zuverlässig aber ich glaube den Kampf mit solchen Dingen mich von Zeit zu Zeit und finde nicht eine gute Allgemeine Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den folgenden batch-Skript sollte das tun, was Sie wollen:
Die Anzahl der Zeilen, die entfernt werden, nachdem eine passende Zeile kann so konfiguriert werden, durch die Einstellung der
REMOVE_COUNT
variable.Skript verarbeitet auch Dateien mit leeren Zeilen korrekt über einen trick: Der find-Befehl wird verwendet, um den Präfix alle Zeilen mit Zeilennummern. So ist der for-Befehl wird nicht überspringen leerer Zeilen.
findstr
betreibt Zeile-Weise. Sie können nicht alles tun, mit Ihr, die sich über mehr als eine Zeile.In jedem Fall sind Sie in einer Welt der Schmerzen, wenn man das mit batch-Dateien. Obwohl Sie sicherlich kann Schleife durch die Datei und Ausgabe nur bestimmter Linien, wie würde dies Aussehen, ein bisschen wie die folgenden:
(ungetestet, könnte aber funktionieren). Das problem hier ist zweierlei:
for /f
entfernt alle leeren Zeilen aus der Ausgabe, so dass, wenn Sie Ihre Datei hatte Sie vor, Sie will nicht, Sie danach. Dies kann oder kann nicht ein problem für Ihren konkreten Fall. Ein weiteres problem ist, dass der Umgang mit Sonderzeichen bekommen kann, Behaart. Ich gebe keine Garantie, dass die oben genannten arbeiten, wie es sollte für Dinge wie>
,<
,&
,|
, ...Ihre beste Wette ist in diesem Fall, wenn Sie benötigen, um führen Sie es auf fast jedem Windows-Rechner, wäre wahrscheinlich ein VBScript. Das string-handling-Funktionen sind viel mehr robust es.
grep
nehmen können-A
oder-B
zu gehören Linien nach und/oder vor!findstr
nicht.grep
. Nur versucht zu helfen dude. Entspannen.