Hallo,
suche schon die längste Weile ohne Erfolg. Ich habe diese Zeile: telephoneNumber: +39 0474-551 999
telephoneNumber: und eine Leerstelle am Zeilenanfang sollen bleiben alle anderen Zeichen, die in der Telefonnummer enthalten sind, sollen verschwinden, egal was es ist (Leerstellen, Bindestriche, alles was keine Ziffer ist). Wie mache ich das mit sed?
Gruß Luigi
Hallo,
On 2008-11-06 11:44, Luigi di Lazzaro wrote:
Ich habe diese Zeile: telephoneNumber: +39 0474-551 999 telephoneNumber: und eine Leerstelle am Zeilenanfang sollen bleiben alle anderen Zeichen, die in der Telefonnummer enthalten sind, sollen verschwinden, egal was es ist (Leerstellen, Bindestriche, alles was keine Ziffer ist).
das kannst du zum Beispiel so machen: sed -e 's/ .*/ /'
hth, Benjamin
Luigi di Lazzaro wrote:
telephoneNumber: +39 0474-551 999
telephoneNumber: und eine Leerstelle am Zeilenanfang sollen bleiben alle anderen Zeichen, die in der Telefonnummer enthalten sind, sollen verschwinden, egal was es ist (Leerstellen, Bindestriche, alles was keine Ziffer ist). Wie mache ich das mit sed?
Hmm, da gibt es meherere Loesungen. Ich nehme an, dein File ist ein LDIF File, und deshalb einigermassen streng formatiert.
1) "In jeder Zeile, die mit telephoneNumber beginnt, loesche alles nach dem ersten Doppelpunkt; behalte nur den Doppelpunkt selber":
sed -e '/^telephoneNumber:/s/:.*/:/'
2) "substituiere 'telephoneNumber:' und alles was danach kommt mit 'telephoneNumber'":
sed -e 's/telephoneNumber: .*/telephoneNumber:/'
3) Wie 2) aber mit einem Trick: (back-reference): in sed kannst du sub-expressions in Klammern setzen ( und ) und alles was in der Klammer enthalten ist, spaeter mit \1 referenzieren:
sed -e 's/(telephoneNumber:) .*/\1/'
HTH Thomas
PS (Eigenwerbung): Vielleicht interessiert dich meine kleine Einfuehrung in sed: http://www.tty1.net/sed-tutorium_de.html
Am Thursday 06 November 2008 12:08:01 schrieb Thomas Pircher: Zunächst einmal danke für die Antworten,
@Beniamin Dein Einzeiler lässt mir nur den Zeilenanfang zurück. Ich brauche den Zeilenanfang bis zum Doppelpunkt und danach noch eine Leerstelle.
[sed regexp]
telephoneNumber: +39 0474-551 999
telephoneNumber: und eine Leerstelle am Zeilenanfang sollen bleiben alle anderen Zeichen, die in der Telefonnummer enthalten sind, sollen verschwinden, egal was es ist (Leerstellen, Bindestriche, alles was keine Ziffer ist). Wie mache ich das mit sed?
Hmm, da gibt es meherere Loesungen. Ich nehme an, dein File ist ein LDIF File, und deshalb einigermassen streng formatiert.
Ja, du vermutest richtig.
- "In jeder Zeile, die mit telephoneNumber beginnt, loesche alles
nach dem ersten Doppelpunkt; behalte nur den Doppelpunkt selber":
sed -e '/^telephoneNumber:/s/:.*/:/'
- "substituiere 'telephoneNumber:' und alles was danach kommt mit
'telephoneNumber'":
sed -e 's/telephoneNumber: .*/telephoneNumber:/'
- Wie 2) aber mit einem Trick: (back-reference): in sed kannst du
sub-expressions in Klammern setzen ( und ) und alles was in der Klammer enthalten ist, spaeter mit \1 referenzieren: sed -e 's/(telephoneNumber:) .*/\1/'
Daran hatte ich bereits gedacht. Leider kommen die Leerstellen ganz unterschiedlich und, wenn ich es richtig verstanden habe, werden gerade diese als Unterbrechung interpretiert.
Kann es nur weiter empfehlen, da ist viel drinnen. Ich probiere weiter. Angenommen ich komme zum Ziel melde ich es hier. Gruß
Thomas Pircher wrote:
Luigi di Lazzaro wrote:
telephoneNumber: +39 0474-551 999
telephoneNumber: und eine Leerstelle am Zeilenanfang sollen bleiben alle anderen Zeichen, die in der Telefonnummer enthalten sind, sollen verschwinden, egal was es ist (Leerstellen, Bindestriche, alles was keine Ziffer ist). Wie mache ich das mit sed?
Upps, ich hatte das nicht richtig verstanden... Ich habe alles nach TelephoneNumber; geloescht.
Neuer Versuch:
sed -e '/^ telephoneNumber: /{s/[^0-9]//g; s/^/ telephoneNumber: /;}'
Erklaerung: In allen Zeilen die mit " TelephoneNumber: " beginnen tue folgendes: 1) loesche alles, was keine Ziffer ([^0-9] ist) 2) ersetze den Zeilenanfang mit " TelephoneNumber: "
Test: Ein: telephoneNumber: +39 0474-551 999 Aus: telephoneNumber: 390474551999
habe ich es nun richtig verstanden? :-)
Thomas
Am Thursday 06 November 2008 12:25:40 schrieb Thomas Pircher: Hallo nochmals,
Upps, ich hatte das nicht richtig verstanden... Ich habe alles nach TelephoneNumber; geloescht.
Neuer Versuch:
sed -e '/^ telephoneNumber: /{s/[^0-9]//g; s/^/ telephoneNumber: /;}'
Erklaerung: In allen Zeilen die mit " TelephoneNumber: " beginnen tue folgendes:
- loesche alles, was keine Ziffer ([^0-9] ist)
- ersetze den Zeilenanfang mit " TelephoneNumber: "
Test: Ein: telephoneNumber: +39 0474-551 999 Aus: telephoneNumber: 390474551999
Ja, aber es funktioniert nicht :( sed -e '/^ telephoneNumber: /{s/[^0-9]//g; s/^/ telephoneNumber: /;}' $WORKPATH/ldap.sed > $WORKPATH/tfbuch.ldif
Mache ich etwas falsch? Luigi
Luigi di Lazzaro wrote:
Habe den Fehler gefunden:
sed -e '/^ telephoneNumber: /{s/[^0-9]//g; s/^/ telephoneNumber:
da ist eine Leerstelle.
Sorry! war (bin) heute ein wenig verwirrt.
Merke: schreib niemals (sed) Programme wenn du am Abend zuvor eine Katholikenverbrennung[1] gebuehrend gefeiert hast! :-)
Thomas
Am Thursday 06 November 2008 14:00:38 schrieb Thomas Pircher: Hallo Thomas, hallo *,
[sed Befehlsfolge] sed -e '/^telephoneNumber: /{s/[^0-9]//g; s/^/ telephoneNumber: /;}' Ich wusste gar nicht, dass man auf eine Zeile eine Befehlsfolge anwenden kann. Ich vermute, dass die geschweiften Klammer für diesen Zweck sind. So ein Beispiel in deinem Howto wäre sicher nützlich oder habe ich es übersehen? Jedenfalls geht das sehr gut.
Merke: schreib niemals (sed) Programme wenn du am Abend zuvor eine Katholikenverbrennung[1] gebuehrend gefeiert hast! :-)
Da hast du ja Glück gehabt, dass du mit einer einzigen Leerstelle davon gekommen bist ... Gruß und danke an alle für die Antworten Luigi
Il giorno gio, 06/11/2008 alle 11.44 +0100, Luigi di Lazzaro ha scritto:
Hallo,
suche schon die längste Weile ohne Erfolg. Ich habe diese Zeile: telephoneNumber: +39 0474-551 999
telephoneNumber: und eine Leerstelle am Zeilenanfang sollen bleiben alle anderen Zeichen, die in der Telefonnummer enthalten sind, sollen verschwinden, egal was es ist (Leerstellen, Bindestriche, alles was keine Ziffer ist). Wie mache ich das mit sed?
Può essere awk?
$echo "telephoneNumber: +39 0474-551 999" | \ awk -F: '{ gsub(/[+ -]/,""); print $1": "$2 }'
telephoneNumber: 390474551999
Gruß Luigi
Ciao, DAniele
--
Am Thursday 06 November 2008 12:09:27 schrieb DAniele Gobbetti: Ciao Daniele,
suche schon die längste Weile ohne Erfolg. Ich habe diese Zeile: telephoneNumber: +39 0474-551 999
telephoneNumber: und eine Leerstelle am Zeilenanfang sollen bleiben alle anderen Zeichen, die in der Telefonnummer enthalten sind, sollen verschwinden, egal was es ist (Leerstellen, Bindestriche, alles was keine Ziffer ist). Wie mache ich das mit sed?
Può essere awk?
$echo "telephoneNumber: +39 0474-551 999" | \ awk -F: '{ gsub(/[+ -]/,""); print $1": "$2 }'
telephoneNumber: 390474551999
Perchè no? Non credo di venirne a capo con sed. Faccio comunque ancora alcuni tentativi Grazie Luigi