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

Mitglied: newbi2009

newbi2009 (Level 1) - Jetzt verbinden

May 03, 2021 um 14:22 Uhr, 441 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
May 03, 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
May 03, 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
May 03, 2021 um 15:00 Uhr
Kleine Ergänzung: Das gilt übrigens für alle (Konsolen)Befehle, die eine Liste ausgeben.
Bitte warten ..
Mitglied: HansDampf06
May 03, 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
May 03, 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
May 03, 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 May 03, 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
May 04, 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
May 04, 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
May 04, 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
May 04, 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
May 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
May 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
Data privacy
FAX ist nicht mehr Datenschutzkonform
brammer1 day agoInformationData privacy47 Comments

Hallo, jetzt sollte es jeder begreifen FAX ist nicht mehr Datenschutzkonform brammer

Humor (lol)
Na, kann euer Toaster auch schon WLAN?
ITlerin9522 hours agoGeneralHumor (lol)16 Comments

Also ich frag mich ja selbst echt oft, ob wirkliche alle technischen Neuerungen auch wirklich notwendig sind. Hintergrund ist, ich brauch einen neuen Toaster. ...

Exchange Server
Exchange 2019 als VM?
Mr.Vain1 day agoQuestionExchange Server9 Comments

Hallo zusammen, wir nutzen derzeit Exchange 2013 mit allen Rollen auf einem physischen Server (Ca. 260 Postfächer, Server 2012R2, Xeon E-2603v3 6Core, 16GB RAM, ...

Windows Update
Keine Updates zum Mai-Patchday über WSUS?
solved Coreknabe22 hours agoQuestionWindows Update12 Comments

Moin, wir laden über unseren WSUS die Windows Updates herunter (Server 2012R2). Jetzt stelle ich gerade verwundert fest, dass es Stand jetzt (19:45 Uhr) ...

Exchange Server
Sicherheitsupdates für Exchange Server 11. Mai 2021
kgborn22 hours agoInformationExchange Server4 Comments

Sicherheitsupdates für Exchange Server 11. Mai 2021 Technet-Beitrag Meine Zusammenstellung: Sicherheitsupdates (KB5003435) für Microsoft Exchange Server (11. Mai 2021)

Networking Basics
Statische Route auf UTM
solved Ex0r2k1610 hours agoQuestionNetworking Basics30 Comments

Moin! Ich habe an meiner Sophos UTM an einem physischen Interface einen Switch angeschlossen. Dieser läuft im Netz 10.1.1.0/24. Ich kann von meinem aktuellen ...

Firewall
Firewallregeln
doubleo1 day agoQuestionFirewall6 Comments

Hallo Zusammen, ich habe noch Schwierigkeiten in der Umsetzung von den Accesslists auf einem Cisco Switch SG3501X. Ich möchte an folgendem Beispiel Setup gerne ...

Exchange Server
Office 365 ohne lokalen Exchange
RicoPausB1 day agoQuestionExchange Server8 Comments

Moin zusammen wir sind erst vor kurzem ins Office 365 eingestiegen und hatten vorher auch keinen Exchange Server im Einsatz. Ein Hybrid-Setup liegt also ...