x-stellige Zahlen im Kontext mit SED suchen und ersetzen?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Shadow128
Beiträge: 16
Registriert: 07.09.2007 16:23:16

x-stellige Zahlen im Kontext mit SED suchen und ersetzen?

Beitrag von Shadow128 » 14.01.2014 12:31:34

Hallo zusammen,

bin gerade dabei, mir eine Log-Datei per SED aufzubereiten, und stehe jetzt vor meinem (hoffentlich) letztem Problem.

Ich habe innerhalb eine Zeile folgende Stringketten:

Code: Alles auswählen

 000000/****/
/**:
Die Sternchen können Zahlen, aber auch Buchstaben sein, daher würde ich hier gerne mit Wildcard arbeiten.
Wie sähe hier der sed-Befehl aus, um die Stringketten (sind an unterschiedlichen Positionen der Zeile), mit einem Leerzeichen zu ersetzen?


Danke vorab und viele Grüße,
Shadow128

Benutzeravatar
detix
Beiträge: 1703
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von detix » 14.01.2014 17:42:57

Es ist nicht ganz klar, was gemeint ist.
"[A-Za-z]" findet alle Buchstaben, du musst nur sehen das es die richtigen Zeilen betrifft:

Code: Alles auswählen

sed '/dies muss in der Zeile zu finden sein/s/[A-Za-z]/ /'
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

luka
Beiträge: 14
Registriert: 12.01.2014 19:26:56

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von luka » 15.01.2014 00:07:09

Bin mir auch nicht sicher, ob ich Dich richtig verstehe.
Wenn Du in "000000/****/" ODER in "/**:" die Sternchen (also 4 bzw. 2 aufeinander folgende alphanumerische Zeichen) durch Leerzeichen ersetzen willst, wobei die Muster jeweils an einer beliebigen Stelle der Zeile stehen und von beliebigen anderen Zeichen umgeben sein können, dann würde ich es so machen:

Code: Alles auswählen

sed '{s/\(000000\/\)[a-zA-Z0-9]\{4\}\(\/\)/\1    \2/g 
s/\(\/\)[azA-Z0-9]\{2\}\(:\)/\1  \2/g}'
Geht bestimmt auch übersichtlicher, bin aber grad zu müde, sorry ...
Gruß,
luka

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von linuxCowboy » 15.01.2014 06:21:22

take that:

Code: Alles auswählen

sed -r 's|(0{6}/)[[:alnum:]]{4}/|\1    /|g; s|/[[:alnum:]]{2}:|/  :|g'
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von Meillo » 17.01.2014 09:49:26

detix hat geschrieben:Es ist nicht ganz klar, was gemeint ist.
luka hat geschrieben:Bin mir auch nicht sicher, ob ich Dich richtig verstehe.
Bitte immer ein paar Zeilen Ausgangsdaten (so wie du sie vorliegen hast) mitliefern und zudem angeben, wie diese Zeilen korrekt umgewandelt aussehen sollen. Wir versuchen dann, dir Code zu liefern, der aus dem einen das andere macht. (Danach koennen wir schrittweise fuer die Sonderfaelle nachbessern.) Ohne konkrete Ausgangs- und Zieldaten bleibt alle Arbeit ein Raten.
Use ed once in a while!

Shadow128
Beiträge: 16
Registriert: 07.09.2007 16:23:16

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von Shadow128 » 17.01.2014 14:28:04

OK, sorry für die zu knappen Angaben :-/

Also nochmal von vorne ;-)

Mittlerweile hat sich die Anforderung doch etwas geändert.
Aber erstmal ein Beispiel, wie die Log-Datei mittlerweile aussieht:

2014/01/14 17:16:50 Adam 0048 000000/0530/9847/84:CGK1TDGIP5ZXR3VK4J32HWKNKEPLMZTV
2014/01/14 17:16:54 Stephan 8849 000040/8837/7726/32:VVCSHJ50DI7U59PEWSMUJP2CT5TG37UR

Der lange String am Ende kann stehen bleiben, ich müsste "nur" noch die rot markierten Stellen entfernt haben, so dass es folgendermaßén aussehen würde:

2014/01/14 17:16:50 Adam 0048 9847 CGK1TDGIP5ZXR3VK4J32HWKNKEPLMZTV
2014/01/14 17:16:54 Stephan 8849 7726 VVCSHJ50DI7U59PEWSMUJP2CT5TG37UR


Das Problem daran ist aber, dass die rot markierten Zahlen immer unterschiedliche sein können.
Eine feste Stelle kann ich dafür leider nicht angeben, da der Name am Anfang (Adam bzw. Stephan) immer wieder unterschiedlich sein können (also von der Länge her)
Wenn das gar nicht möglich ist, dann wäre mir auch schon mit einem ersetzen der "/" und ":" durch ein Leerzeichen innerhalb der rotmarkierten Stellen geholfen.
Hier ist aber wieder das Problem, dass am Anfang der Zeile diese Zeichen auch vorhanden sind :-/

Danke vorab

charno
Beiträge: 636
Registriert: 28.06.2004 20:24:34

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von charno » 17.01.2014 15:20:59

So was?

Code: Alles auswählen

sed -e 's/[a-zA-Z0-9]*\/[a-zA-Z0-9]*\/\([a-zA-Z0-9]*\)\/[a-zA-Z0-9]*:/\1 /'
Läuft bei mir mit den Beispieldaten. Das ganze ersetzt allerdings JEDES vorkommen von

Code: Alles auswählen

*/*/*/*:
, ohne auf die Umgebung rücksicht zu nehmen. Die Sternchen sind dabei eine beliebige Menge an alphanumerischen Zeichen.
"Wer sich nicht bewegt, spürt seine Fesseln nicht." - Rosa Luxemburg

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von linuxCowboy » 17.01.2014 15:50:40

take this:

Code: Alles auswählen

sed -r 's|[0-9]{6}/[[:alnum:]]{4}/||; s|/[[:alnum:]]{2}:| |'
-der_linux_cowboy --- Besser werden! ... f*** w$$

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von Cae » 17.01.2014 16:41:43

linuxCowboy hat geschrieben:take this:

Code: Alles auswählen

sed -r 's|[0-9]{6}/[[:alnum:]]{4}/||; s|/[[:alnum:]]{2}:| |'
Die beiden Anweisungen sind nicht voneinander abhaengig, das kann in die Hose gehen ('ne Zeile koennte nur auf den ersten Teil matchen und kaputteditiert werden).

Ich wuerde

Code: Alles auswählen

$ sed 's,[0-9]\{6\}/[0-9]\{4\}/\([0-9]\{4\}\)/[0-9]\{2\}:,\1 ,'
empfehlen. "Ersetze eine Folge aus 6x, 4x, 4x und 2x 0-9, mit / dazwischen und : danach, durch den dritten Block und ein Leerzeichen." Das wahre sed unterstuetzt uebrigens sogenannte basic regular expressions, daher ist z.B. a{42} als a\{42\} zu schreiben. GNU macht natuerlich 'ne Extrawurst, da ist auch + ohne Escaping zulaessig.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von wanne » 17.01.2014 17:40:05

Sowas?

Code: Alles auswählen

sed -E 's, ([0-9]*/){2}([0-9]*)/[0-9]*:, \2 ,g'
Sucht teil der form leerziechen,Nummern1,Schrägstrich,Nummern2,Schrägstrich,Nummern3,Schrägstrich,nummern4,Doppelpunkt und ersetzt das durch Leerziechen,Nummern3,Leerzeichen
rot: Moderator wanne spricht, default: User wanne spricht.

Shadow128
Beiträge: 16
Registriert: 07.09.2007 16:23:16

Re: x-stellige Zahlen im Kontext mit SED suchen und ersetzen

Beitrag von Shadow128 » 17.01.2014 19:05:02

Habe den Code von LinuxCowboy erstmal so übernommen.
Scheint super zu funktionieren :-)

Vielen Dank für eure Hilfe !! :D

Antworten