2017-01-20 6 views
0

Ich habe folgende Protokollzeile:sed innerhalb einer Gruppe/Spiel ersetzen

2017-01-01 Kunde: abc-ID: 144

Ich brauche es zu verarbeiten und es in MySQL einfügen kommen, aber manchmal sind die Daten möglicherweise falsch:

2017-01-01 Kunde: a, b .c-ID: 144

Wie kann ich einen sed replace nur innerhalb der Gruppe "Client: xxx" ausführen, damit ich die unerwünschten Zeichen entfernen kann?

+0

Wo endet Ihre Gruppe "Client: xxx"? –

Antwort

1

Verwendung von Rückreferenzierungen und t Befehl, erfassen und Ausgang wollte nur Zeichen zwischen Client: und ID:

$ sed -r ':a;s/(Client:[^ ,.]*)[ ,.](.* ID)/\1\2/;ta;' <<< "2017-01-01 Client:a, b .c ID:144" 
2017-01-01 Client:abc ID:144 

Alle Zeichen bis zu und ohne nächste unerwünschte Zeichen ([ ,.]) erfasst und ausgegeben. Der Befehl t (für Test) wird an den Anfang des Skripts (mit der Bezeichnung :a) übergeben, wenn die Substitution erfolgreich ist.

+0

Genau das, was ich gesucht habe! Ich habe etwas über Capture-Gruppen gelernt, wusste aber nicht, wie man Charaktere ausschließt. Ich habe keine Ahnung was: a; und; ta; tu, aber ich werde es nachschlagen. Allerdings, wenn Sie es erklären wollen und dies zu einem informativeren Beitrag für andere machen, die es lesen, wird es geschätzt. – w00t