Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Text ausschneiden, wie ???

Empfohlene Antworten

Veröffentlicht

Hallo Kollegen,

habe schon des öfteren ein Problem gehabt, konnte mich aber irgendwie immer selbst raus retten, über Umwege oder zusätzliche Scripte ;)

Jetzt reicht es mir, da muss eine andere Lösung her, also eventuell könnt Ihr mir ja helfen:

Es geht um folgenden String, der automatisiert zu analysieren ist:

>>>"

Feb 16 23:43:37 linux kernel: --- Networkalert!!! --- IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:ff:ff:6f:69:8d:08:ff SRC=192.168.2.155 DST=192.168.0.255 LEN=229 TOS=0x00 PREC=0x00 TTL=128 ID=22974 PROTO=UDP SPT=138 DPT=138 LEN=209

"<<<

Die String-Länge, genauso wie die Anzahl der durch "Leer" getrennten Felder können variieren, folglich ist der Einsatz von cut und gawk nur über Umwege und bedingt möglich. wenn ich z.B. genau den Teil mit "linux kernel: --- Networkalert!!! ---" ausschneiden will, sprich dass der Rest nacher z.B. in einer Variable steht.... Mit Sed ist mir noch keine Idee gekommen, aber eventuell sitze ich ja nur auf dem Schlauch. :confused: Habt Ihr eine Idee?

Besten Dank im Vorraus. :D

Grüße, deepspace_9

------------------------

PS: Damit keine Missverständnisse auftauchen:

String vorher:

Feb 16 23:43:37 linux kernel: --- Networkalert!!! --- IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:ff:ff:6f:69:8d:08:ff SRC=192.168.2.155 DST=192.168.0.255 LEN=229 TOS=0x00 PREC=0x00 TTL=128 ID=22974 PROTO=UDP SPT=138 DPT=138 LEN=209

String nachher:

Feb 16 23:43:37 linux kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:ff:ff:6f:69:8d:08:ff SRC=192.168.2.155 DST=192.168.0.255 LEN=229 TOS=0x00 PREC=0x00 TTL=128 ID=22974 PROTO=UDP SPT=138 DPT=138 LEN=209

... habe ich gefunden, ist ja schon mal ein Anfang (zumindest für variable Feldanzahl hinten, aber eben nicht vorn)

cut -d\ -f1,2,3,8-

wäre eine Lösung dafür.

Aber was mache ich, wenn zum Bsp. (aus welchen Gründen auch immer) die Feldanzahl vor dem zu löschenden String sich ändert...

z.B.:

Feb 16 23:43:37 --- Networkalert!!! --- IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:ff:ff:6f:69:8d:08:ff SRC=192.168.2.155 DST=192.168.0.255 LEN=229 TOS=0x00 PREC=0x00 TTL=128 ID=22974 PROTO=UDP SPT=138 DPT=138 LEN=209

Dann schliesst logischerweise ein "cut -d\ -f1,2,3,8-" nicht mehr "linux kernel: --- Networkalert!!! ---" aus, sondern " --- Networkalert!!! --- IN=eth0 OUT=" was ja NICHT gewünscht ist!

Also, habt ihr noch eine weitere Idee?

thanks and greets...

:floet:

Hallo :cool:

Keiner eine Idee? Oder keine Lust? :confused:

Am :schlaf: seid Ihr ja nicht unbedingt....

Meinst du sowas hier:


echo 'Feb 16 23:43:37 linux kernel: --- Networkalert!!! --- IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:ff:ff:6f:69:8d:08:ff SRC=192.168.2.155 DST=192.168.0.255 LEN=229 TOS=0x00 PREC=0x00 TTL=128 ID=22974 PROTO=UDP SPT=138 DPT=138 LEN=209' | sed 's#--- Networkalert!!! --- ##g'

Hallo,

wenn es so komplex wird, musst du mehrere Versionen schreiben. Sobald diese Daten nicht nach einer festen Struktur aufgebaut sind, nutzen solche Tools wie sed und awk recht wenig.

Du müsstest praktisch zuerst mal alle Möglichkeiten herausfinden, also wie viele Spalten, Zeichen und Worte vor der Stelle stehen können, die du herausfiltern möchtest. Logdateien sind ja i.d.R. immer nach einem bestimmten Schemau aufgebaut, und das müsstest du erstmal herausbekommen. Danach kannst du entweder einen Algorithmus zum Filtern schreiben, oder eben mehrere Versionen, eine für lange und kurze Logdateien, eine für Version 2 und Version 2.1 etc.

Vielleicht solltest du dir SED nochmal genauer anschauen.

Damit kannst du z.B. in deinem String nach bestimmten Schlüsselwörtern/-zeichen suchen, nach denen die Information steht, die du löschen, speichern oder was auch immer willst.

Ähnlich wie schlaubi vorgeschlagen hat, könntest du alle Informationen, die du Brauchst aus dem String extrahieren und gesondert darstellen oder so.

Willst du z.B. alles, was vor der MAC-Adresse kommt bearbeiten, benutzt du

"^.*MAC=" (übersetzt: Zeilenanfang bis "MAC=")

Jetzt könntest du also auch alles, was nach der MAC-Adresse kommt löschen und das Ergebnis, das in diesem Fall nur aus der MAC bestünde, in einer Variablen oder einer Datei speichern.

Sicherlich, ist es nicht leicht, sich SED selbst ausführlich beizubringen, aber es lohnt sich.

:marine

Meinst du sowas hier:


echo 'Feb 16 23:43:37 linux kernel: --- Networkalert!!! --- IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:ff:ff:6f:69:8d:08:ff SRC=192.168.2.155 DST=192.168.0.255 LEN=229 TOS=0x00 PREC=0x00 TTL=128 ID=22974 PROTO=UDP SPT=138 DPT=138 LEN=209' | sed 's#--- Networkalert!!! --- ##g'

:uli

Na, das war doch genau das, was ich eigendlich suchte...

Ich war zu blöde das mit sed hinzubekommen.

Vielen Dank.

Gruß, deepspace_9

Hallo,

so wie ich das verstehe, handelt es sich eben nicht um bestimmte Zeichenketten, denn das wäre ja kein Problem.

;) Ok, eventuell habe ich mich doch missverständlich ausgedrückt :(

Ich meinte schon ein festes String, aber eben aus einer variablen Zeichekette, eben nicht an 8. Stelle, oder so....

Auch wenn es einfach war, ich stehe mit den seds und awks mit ihren rationelen Ausdrücken ein wenig auf Kriegsfuss. Naja, bislang habe ich es auch meistens irgendwie, irgendwann hinbekommen....

Trotzdem, an alle:

:uli Vielen Dank für Eure Hilfe.

Besten Grüße, Deepspace_9

Moin,

eventuell habe ich mich doch missverständlich ausgedrückt :(

Ich meinte schon ein festes String, aber eben aus einer variablen Zeichekette, eben nicht an 8. Stelle, oder so....

du hast dich definitiv falsch ausgedrückt und tust es gerade wieder. ;)

Zeichenkette ist die deutsche Übersetzung für String.

Was sind feste Strings? :nett:

Was du sicherlich sagen wolltest ist, dass du eine(n) String/Zeichenkette hast, nämlich:

Feb 16 23:43:37 --- Networkalert!!! --- IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:ff:ff:6f:69:8d:08:ff......
Und du möchtest jetzt aus diesem nach eine[mr] bestimmten String/Zeichenkette, nämlich "--- Networkalert !!! --- " suchen, egal an welcher Stelle sich diese Zeichenkette befindet und diese anschließend aus dem originalen String:
Feb 16 23:43:37 --- Networkalert!!! --- IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:ff:ff:6f:69:8d:08:ff......

herauslöschen bzw. durch ein Blank ersetzen.

Da es sich um einen gleichbleibenden String handelt, jedoch die Position an der er zu finden ist variiert, benötigst du lediglich "--- Networkalert !!! --- " als Suchmuster.

Wenn du z.B. nach "--- Networkalert !!! --- " und "- - - NetworkAlert - - -" suchen willst und mit einem sed-Aufruf beide Fälle durch ein blank ersetzen möchtest, musst du auf 'Regular Expressions' (regexp) zurückgreifen und dein Suchmuster (regexp) auf den String anwenden.

seds und awks mit ihren rationelen Ausdrücken

Wie bereits oben erwähnt - es heißt regulärer Ausdruck, rationelle Ausdrücke gibt es nicht.

Mein Chef macht zwar einen rationellen Eindruck, aber das ist eine andere Geschichte.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.