PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Streameditor mit Regular Expressions



Eagle
19-11-2010, 11:58
Hallo,

ich baue mir gerade ein SED-Script, das aus einem Adressdatenwust, den ich mir mit pdf2text aus einer PDF-Datei erzeugt habe, eine CSV-Datei für einen Datenimport erzeugt.

Zum Beispiel diese Zeile in einer Datei Input.txt:

"+siggset+ print & media AG", "Dr. Rudolf-Eberle-Str. 47 D-79774 Albbruck Tel.: +49 (7753) 9219 0 Fax.: +49 (7753) 9219 99 www.siggset.com info@siggset.com
wird durch

sed 's/ D-/", "/' Input.txt
zu

"+siggset+ print & media AG", "Dr. Rudolf-Eberle-Str. 47", "79774 Albbruck Tel.: +49 (7753) 9219 0 Fax.: +49 (7753) 9219 99 www.siggset.com info@siggset.com

und so weiter.

Ich suche jetzt eine SED-Regel, die die PLZ+Leerzeichen erkennt und dann nicht die PLZ ersetzt, sondern nur das Leerzeichen nach den fünf Ziffern mit '", "' ersetzt.

Von der Logik her, stelle ich mir den einen Teil des Ausdruckes so vor:

's/[0-9]{5} /'
Was nach beliebigen fünf Zifern und einem anschliessenden Leerzeichen suchen soll.

Ich komme aber nicht ganz klar damit, vor allem nicht mit der Bedingung, daß nicht die 5 Ziffern plus Leerzeichen ersetzt werden soll, sondern nur das Leerzeichen.

Kennt sich mit der Vorgehenweise jemand hier aus?

Grüße

Eagle

John W
19-11-2010, 12:57
sed -r 's/([0-9]{5}) /\1/'

Eagle
19-11-2010, 13:04
Danke John,

auf die runden Klammern wäre ich jetzt nie gekommen. Was macht jetzt expizit "\1"? Ich merke jetzt, dass aus

'79774 Albbruck' ein '79774Albbruck' wird.

Es tut sich was, besser wäre natürlich '79774, Albbruck'. Ich will ja das Leerzeichen durch ein "Komma+Leerzeichen" ersetzen,

John W
19-11-2010, 13:14
Die runden Klammern erstellen eine adressierbare Gruppe. Die Gruppen werden mit \1, \2 usw. angesprochen. Damit das funktioniert, muss sed mit erweiterten regulären Ausdrücken arbeiten, daher der Parameter -r beim Aufruf.

Eagle
19-11-2010, 13:22
Okay,

ich habe die Lösung:


sed -r 's/([0-9]{5}) /\1, /'