Powershell - Zeilenumbruch hinter oder vor keyword in log Datei einfügen

Mitglied: newbi2009

newbi2009 (Level 1) - Jetzt verbinden

03.05.2021 um 14:22 Uhr, 410 Aufrufe, 13 Kommentare

Hallo zusammen,

ich verzweifele gerade an einem kleinen Skript:
Ich habe eine große Log-Datei (mit Datei und Verzeichnisangaben eines bestimmten Pfades aus einem LINUX System), ohne jegliche Zeilenumbrüche.
Jetzt würde ich gerne, dass alle Dateiuen bzw Pfade untereinander stehen.
Das heisst, ich würde gerne einen Zeilenumbruch hinter jeden Dateinamen bzw. vor jede Anzeige der Dateirechte (-rw-rw----) hinbekommen, finde allerdings keinen Ansatz hierfür.
Das Problem ist, dass alle Dateirechte unterscheidlich sind. ich kann also nicht nach z.B. "-rw-rw----" suchen. Auch heißen alle Dokumente anders, sodass ich auch hier nach keinem bestimmten Pattern suchen kann.
Das Einzige immer wiederkehrende sind die Lehrstellen in der Dateibeschreibung -rw-rw---- 1 root log .................

Hat dafür jemand einen Ansatz oder gar ein fertiges Skript

Danke und Gruß
Newbi
Mitglied: HansDampf06
03.05.2021 um 14:59 Uhr
Wie entstehen denn die betreffenden Log-Dateien? Durch ein selbstgeschriebenes Script?

Das Phänomen, dass Verzeichnisangaben fortlaufend hintereinander in eine Datei geschrieben werden, ist dann zu beobachten, wenn innerhalb eines Scripts die Ausgabe des Befehls ls -la zunächst in eine Variable geschrieben wird und dann erst aus der Variable heraus die Daten in die Log-Datei gelangen. Geeignete Abhilfe dagegen ist, die Ausgabe direkt in die Log-Datei umzuleiten. Sind vorher weitere Bearbeitungsschritte erforderlich, dann kann eine Hilfsdatei gute Dienste leisten.

Viele Grüße
HansDampf06
Bitte warten ..
Mitglied: TK1987
03.05.2021, aktualisiert um 15:51 Uhr
Moin,

Zitat von @newbi2009:
Ich habe eine große Log-Datei (mit Datei und Verzeichnisangaben eines bestimmten Pfades aus einem LINUX System), ohne jegliche Zeilenumbrüche.
Heisst im Klartext, du bist jetzt auf Windows unterwegs?!
Jetzt würde ich gerne, dass alle Dateiuen bzw Pfade untereinander stehen.
Das Problem ist, dass alle Dateirechte unterscheidlich sind. ich kann also nicht nach z.B. "-rw-rw----" suchen.
Doch kannst du, genau dafür gibt es RegEx:
Regex Tutorial
Regex Legende

Mit Powershell, z.B.:
Heisst übersetzt: Splitte überall, wo 10 aufeinander folgende Zeichen folgen, die aus -, d, r, w, s, S, t,l oder x bestehen und dahinter ein Leerzeichen folgt.

Gruß Thomas
Bitte warten ..
Mitglied: HansDampf06
03.05.2021 um 15:00 Uhr
Kleine Ergänzung: Das gilt übrigens für alle (Konsolen)Befehle, die eine Liste ausgeben.
Bitte warten ..
Mitglied: HansDampf06
03.05.2021, aktualisiert um 15:11 Uhr
Zitat von @TK1987:

Mit Powershell, z.B.:
Heisst übersetzt: Splitte überall, wo 10 aufeinander folgende Zeichen folgen, die aus -, d, r, w, s oder x bestehen.

Ich habe das jetzt nicht ausprobierte, aber wegen der Funktionsweise von Splittbefehlen im anderen Zusammenhang: Führt das aber nicht dazu, dass der Zeilenumbruch an die Stelle der (bisherigen) Suchzeichenfolge tritt?

Und dann bedarf es doch noch einer komplexeren Suchzeichenfolge. Wenn ich den Codeschnipsel richtig verstehe, wird nur ein einziges Zeichen untersucht. Indes müssen sieben Zeichen untersucht werden. Mit der Auswertung nur eines Zeichens würde an ganz vielen Stellen ein Splitting erfolgen.

Ferner fehlen noch die Zeichen S und t für spezielle Bits.

Viele Grüße
HansDampf06
Bitte warten ..
Mitglied: TK1987
03.05.2021, aktualisiert um 15:32 Uhr
Zitat von @HansDampf06:
Führt das aber nicht dazu, dass der Zeilenumbruch an die Stelle der (bisherigen) Suchzeichenfolge tritt?
Nein. ?= ist eine Lookahead-Assoziation - es wird nur geprüft, ob das dahinter steht - ohne es mit zu ersetzen.

Wenn ich den Codeschnipsel richtig verstehe, wird nur ein einziges Zeichen untersucht.
Dann hast du das falsch verstanden. Es müssen, wie ich oben bereits beschrieben habe, exakt 10 Zeichen aus der Kombination aufeinander folgen.

Ferner fehlen noch die Zeichen S und t für spezielle Bits.
Danke für den Hinweis, ist oben noch ergänzt.
Bitte warten ..
Mitglied: HansDampf06
03.05.2021 um 15:46 Uhr
Wenn der Suchstring nicht ersetzt wird und das Splitting VOR dem Suchstring erfolgt, dann dürfte es passen.

Mit Blick auf Hard- und Symbolic-Links kann an erster Stelle noch ein kleines L stehen. Das müsste dem Muster hinzugefügt werden.

Unabhängig davon sollte der TO den Ursprung der Log-Dateien prüfen, ob er dort bereits einen Fließtext ohne Umbrüche vermeiden kann. Dann bedarf es keiner späteren Nachbearbeitung des Inhalts der Log-Dateien, was regelmäßig den Aufwand und die Fehleranfälligkeit reduziert.

Viele Grüße
HansDampf06
Bitte warten ..
Mitglied: TK1987
LÖSUNG 03.05.2021, aktualisiert um 16:07 Uhr
Zitat von @HansDampf06:
Wenn der Suchstring nicht ersetzt wird und das Splitting VOR dem Suchstring erfolgt, dann dürfte es passen.
Genau so.
Mit Blick auf Hard- und Symbolic-Links kann an erster Stelle noch ein kleines L stehen. Das müsste dem Muster hinzugefügt werden.
Erledigt. Zudem habe ich noch ergänzt, dass dahinter ein leerzeichen folgen muss.

Selbiges funktioniert natürlich auch unter Linux mittels sed.
Da sed jedoch keine Lookahead/Lookbehind-Assoziationen unterstützt, muss die Suchzeichenfolge hier stattdessen in eine Gruppe gespeichert; und beim ersetzen mit ausgegeben werden.

Unabhängig davon sollte der TO den Ursprung der Log-Dateien prüfen, ob er dort bereits einen Fließtext ohne Umbrüche vermeiden kann. Dann bedarf es keiner späteren Nachbearbeitung des Inhalts der Log-Dateien, was regelmäßig den Aufwand und die Fehleranfälligkeit reduziert.
+1

Gruß Thomas
Bitte warten ..
Mitglied: newbi2009
04.05.2021 um 07:58 Uhr
Super vielen Dank an alle, die hier Ihren "Gehirnschmalz" haben einfließen lassen.
Vielleicht nur zur Erklärung: Ja, ich bin unter Windows unterwegs. Das Log kommt aus einer Cisco ESA (Ironport), die ich leider nur über SSH abrufen kann, und da ich mir das ganze automatiesieren wollte, musste ich auf plink zurückgreifen. Wenn ich über plink abfrage (plink.exe -ssh <userID>@<Device> -pw xxxxxx ls -la mail_logs > <Pfad zur Datei> ) kommt das Ergebnis leider tatsächlich in diesem Format (Wie Hans Dampf in der ersten Antwort geschrieben hat)
Bitte warten ..
Mitglied: TK1987
04.05.2021, aktualisiert um 12:19 Uhr
Zitat von @newbi2009:
Wenn ich über plink abfrage (plink.exe -ssh <userID>@<Device> -pw xxxxxx ls -la mail_logs > <Pfad zur Datei> ) kommt das Ergebnis leider tatsächlich in diesem Format
Merkwürdig. Wie sieht es denn aus, wenn du den Befehl in die Pipeline jagst:
werden so am Ende jeder Zeile die 3 Rautezeichen angefügt? Wäre dann schon mal weniger fehleranfällig, diese hinterher zu splitten.

Btw: Falls du es noch nicht wusstest, Windows hat inzwischen einen eigenen SSH-Client, Putty ist also nicht mehr nötig. Zum Aktivieren, entweder in den Windows Einstellungen unter "Apps und Features > Optionale Features > Feature hinzufügen > OpenSSH-Client" aktivieren, oder
Powershell als Admin starten und folgenden Befehl ausführen:

Bitte warten ..
Mitglied: newbi2009
04.05.2021 um 12:37 Uhr
Also:
Da der Befehl ja in einem comand prompt (cmd) von Windows läuft, gibt es leider kein "sed"
Was aber tatsächlich merkwürdig ist, ist dass wenn ich mir die Ausgabe NICHT in eine Datei pipe, die Bildschirmausgabe "sauber" ist. D.h. nach jeder angezeigten Datei gibt es ganz sauber einen Zeilenumbruch. Sobald ich aber > Dateipfad anhänge, bekomme ich diese unsaubere Ausgabe.

Das ganze läuft auf einem Firmenrechner, auf dem ich keine Adminrechte habe, den Windows SSH client kann ich mir leider nicht installieren. Ausserdem bin ich ganz froh über den PuTTY, weil da ja (quasi umsonst und schon vorinstalliert) der plink gleich mitkommt.....
Eine ander Möglichkeit habe ich ganz einfach nicht, auf die Ironport zuzugreifen.
FTP und SFTP fallen komplett aus - obwohl das in diesem Fall ziemlich gut wäre. Für die Benutzung würde ich - wegen fehlender Sicherheit und Zertifizierung- eine Fristlose bekommen :-) face-smile
Bitte warten ..
Mitglied: TK1987
04.05.2021, aktualisiert um 13:49 Uhr
Zitat von @newbi2009:
Da der Befehl ja in einem comand prompt (cmd) von Windows läuft
Ich dachte du führst das unter Powershell aus?! Habe mich schon gewundert, dass du den Umleitungsoperator > statt Set-Content nutzt... aber funktioniert ja auch mit Umleitungsoperator unter Powershell 🤣
[...] gibt es leider kein "sed"
in CMD natürlich nicht, aber in dem Linux System. Wenn du das jedoch mit CMD machst, musst du Double-Quotes verwenden damit es funktioniert:
Ich würde dir aber raten, den plink gleich von Powershell aus auszuführen. Vielleicht hasst du das Problem da erst gar nicht... und falls doch, hast du mehr Möglichkeiten es zu untersuchen.
Bitte warten ..
Mitglied: newbi2009
05.05.2021 um 07:34 Uhr
Also, ich habe jetzt ein wenig rumexperimentiert, bekomme aber die plink.exe unter powershell garnicht zum rennen. Bei jedem Aufruf bekomme ich eine Fehlermeldung (unerwarteter token "-ssh" in Ausdruck oder Anweisung)

ich denke, ich werde es weiterhin in 2 Schritte machen müssen.
1. per cmd-batch die Log-Datei auf meinen Windows-client laden
2. per Powershell weiterverarbeiten

Zumal das scheinbar e' nicht komplett zu automatisieren ist, da die plink.exe immer auf einen keystroke wartet, der anscheinend NICHT umgangen/automatisiert werden kann. Diese Meldung erscheint immer, sobald man mit plink arbeitet:
"Keyboard-interactive authentication prompts from server"

siehe auch hier: https://stackoverflow.com/questions/64363893/how-to-suppress-keyboard-in ... (Ich hoffe ein Link auf ein externes Forum ist hier erlaubt, ansonsten bitte ich um Löschung des Links und um Entschuldigung!)

Aber vielleicht kannst Du mir noch bei einem anderen Problem(chen) aushelfen, Für den Benutzer gibt es ein Passwort, das mit einem Anführungszeichen anfängt und endet. Wie maskiere ich das korrekt bei der Übergabe im CMD? => "Pa$$w0rt"
Ich habe es ohne Erfolg mit ^"^Pa$$w0rt^"^ und '"'Pa$$w0rt'"' probiert.....

Danke und Gruß
Bitte warten ..
Mitglied: TK1987
05.05.2021 um 08:33 Uhr
Zitat von @newbi2009:
Also, ich habe jetzt ein wenig rumexperimentiert, bekomme aber die plink.exe unter powershell garnicht zum rennen. Bei jedem Aufruf bekomme ich eine Fehlermeldung (unerwarteter token "-ssh" in Ausdruck oder Anweisung)
Funktioniert hier Problemlos, grundsätzlich kann man das "-ssh" aber ohnehin weglassen.
ich denke, ich werde es weiterhin in 2 Schritte machen müssen.
Zumal das scheinbar e' nicht komplett zu automatisieren ist, da die plink.exe immer auf einen keystroke wartet, der anscheinend NICHT umgangen/automatisiert werden kann. Diese Meldung erscheint immer, sobald man mit plink arbeitet:
"Keyboard-interactive authentication prompts from server"
sicher geht das, dafür ist "-batch" da.
Aber vielleicht kannst Du mir noch bei einem anderen Problem(chen) aushelfen, Für den Benutzer gibt es ein Passwort, das mit einem Anführungszeichen anfängt und endet. Wie maskiere ich das korrekt bei der Übergabe im CMD? => "Pa$$w0rt"
Da bin ich ehrlich gesagt auch überfragt. Würde dir auf dauer aber ohnehin dazu raten, die Anmeldung nicht über Passwort, sondern über RSA-Key zu machen.
Bitte warten ..
Heiß diskutierte Inhalte
Windows Server
Lizenzen für Virtualisierungshost
TakworianVor 1 TagFrageWindows Server16 Kommentare

Hallo, ich werde demnächst einen HA-Cluster aus 3 x HP DL580 in Betrieb nehmen. Der Cluster wird unter Proxmox betrieben und es sollen diverse ...

Router & Routing
Suche Tipps für Selfmade-Load-Balancing-Router auf HP MicroServer Gen10+
gelöst MagicChris86Vor 1 TagFrageRouter & Routing7 Kommentare

Hi Leute, ich habe einen HP MicroServer Gen10+ Performance übrig, der bei einer Kundin rausgeflogen ist, weil sie mehr Power brauchte für Desktopvirtualisierung für ...

Windows 7
Win7 64bit - ssd - Dateien verschwinden
rellixVor 1 TagFrageWindows 77 Kommentare

Grüße in die Runde, ich hab nach 20+ Jahren IT Erfahrung viel gesehen und schreibe hier meist erst, wenn ich keine Idee mehr habe ...

Webentwicklung
Webdesigner ist verschwunden
Janno100Vor 19 StundenFrageWebentwicklung3 Kommentare

Hallo zusammen Kunde hat einen Webdesigner der die Domain des Kunden vor einigen Jahren einfach unter seinen eigenen Name weiter geführt hat. Diese haben ...

Netzwerke
Erfahrungen mit HPE Aruba Switches (Aruba OS)
sixofeightVor 10 StundenAllgemeinNetzwerke11 Kommentare

Holla zusammen, Wer von euch setzt Aruba Switches (Aruba OS, ehemals HP ProCurve) ein und wie sind eure Erfahrungen bzw. wie zufrieden seid ihr ...

Netzwerke
Sporadisch, temporäre nicht erreichbare IPs
BlueBookVor 1 TagFrageNetzwerke7 Kommentare

Hallo zusammen, ich habe ein Problem seit mehreren Monaten schon mit meinem Netzwerk. Ich hoffe jemand hat eine Idee oder einen Tipp. Hin und ...

Router & Routing
Routing Verständnisfrage
gelöst GrueneSosseMitSpeckVor 1 TagFrageRouter & Routing6 Kommentare

Moin, ich steh gerade etwas auf dem Schlauch. Ich habe im Wesentlichen zwei Netze: 1.) 192.168.0.0 / 24 Das ist das Netz hinter meinem ...

Netzwerkgrundlagen
Aufgabe - Subnetting
gelöst cornflakes01Vor 1 TagFrageNetzwerkgrundlagen5 Kommentare

Hi, bin zufällig auf diese Seite gestoßen und habe eine Frage bezüglich Subnetting. Wir haben kurz vor unserer Abiturprüfung eine Aufgabenstellung im Unterricht behandelt, ...