• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

problem mit sed

hallo,
suche nach einer anweisung welche mir einen gewissen variablen teil in einer zeile löschen kann.
zeile sieht folgendermaßen aus:Contact:<sip:Bob@192.104.123.234:5060>
und in dieser form bräuchte ich sie:
sip:Bob@192.104.123.234

Mit
Code:
sed -e 's/Contact://g' -e 's/<//g' -e 's/>//g'
habe ich alles bis auf :5060, herausgelöscht, diese nr ist leider variabel, und stellt so ein kleines problem für mich dar.

über eure hilfe wäre ich sehr dankbar

gruß flyingt [/i]
 
Versuch's mal mit
Code:
sed -e 's/Contact://g' -e 's/<//g' -e 's/\(:[0-9]*\)\?>//g'
Falls vor ">" ein Doppelpunkt vorkommt, auf den nur Ziffern folgen, so wird von ":" bis ">" alles gelöscht.
Man kann aber auch vermeiden, die Ersetzung in mehrere Teile zu zerstückeln. Etwa so:
Code:
sed -e 's/Contact:<\(.*\):[0-9]*>/\1/g'
Dann richtet der Befehl z.B. kein Unheil an, falls sonst irgendwo in der Datei ein unschuldiges "<" auftaucht.
 
sc_m schrieb:
Versuch's mal mit
Code:
sed -e 's/Contact://g' -e 's/<//g' -e 's/\(:[0-9]*\)\?>//g'
Kleiner Tipp: Meines wissens nach kann man sed-Befehle mit Strichpunkt trennen. Also etwa so:
Code:
's/Contact://g;s/<//g;s/\(:[0-9]*\)\?>//g'
Das verkürzt es ein bisschen...
 
Ich dank dir, sieht gleich ein wenig besser aus mein Programm.

Hätte da nochmal eine Frage:

und zwar habe ich eine HTML-Seite, von der ich gerne die html-Syntax herausgelöschthaben möchte, welche immer zwischen < .... > klammern steht.
bsp:
<td width="30" class="tiny"align="center">Hallo Welt</td>

Also sollte : Hallo Welt
übrig bleiben

habe es mit folgender Anweisung versucht
Code:
sed 's/\<.*\>//g'

bin leider gescheidert.

Über einen tipp wäre ich euch dankbar.

gruß flyingt
 
flyingt schrieb:
[...]bin leider gescheidert.
Das ist aus zwei Gründen nicht verwunderlich:
  1. "<" und ">" haben keine besondere Bedeutung in regulären Ausdrücken, benötigen also kein "".
  2. In dem angegebenen Beispiel würde ".*" nicht nur bis zum ersten ">" passen, sondern auf die ganze Zeichenkette 'td width="30" class="tiny"align="center">Hallo Welt</td'. Wir müssen also explizit dafür sorgen, dass ">" nicht eingeschlossen wird.
Das funktioniert mit
Code:
sed 's/<[^>]*>//g'
Darf so ein Paar "<",">" eigentlich Zeilenumbrüche enthalten? Das würde die Sache erheblich komplizieren, weil sed zeilenweise arbeitet.
 
ich danke euch für eure hilfestellung,
aber merke schon es bleibt mir wohl nichts anderes übrig als mich mal ein wenig von "sed" zu lösen.
würde es sich denn lohnen bei der manipulation von HTML-Seiten mit awk zu arbeiten, wäre das nächstliegenste was mir einfällt.

gruß flyingt
 
hi,
nochmal ich !
habe mir meine html-Seite mal genauer angeschaut. kann doch die sed-anweisung verwenden :
Code:
sed 's/<[^>]*>//g'
<...> hat keine zeilenumbrüche, danke nochmal !!!

hätte da noch eine frage : möchte nun den text in jeder zeile am zeilenanfang beginnen laßen
Code:
sed -e 's/[[:space:]]//g'
löscht mir ganz klar alle whitespaces weg, würde gerne die whitespaces zwischen zwei wörtern bei behalten.


Bsp:(Vorher)

  • Hallo zusammen
    • grüße aus frankfurt

(Nacher)
Hallo zusammen


Grüße aus frankfurt



(leider zur zeit)
Hallozusammen


grüßeausfrankfrut




über eure hilfe wäre ich dankbar

gruß flyingt
 
Ja. Ich glaube nicht, dass einer hier die Lust hat (geschweige denn dass es Sinn macht) einen HTML::parser für sh-tools zu schreiben.
 
jengelh schrieb:
Ja. Ich glaube nicht, dass einer hier die Lust hat (geschweige denn dass es Sinn macht) einen HTML::parser für sh-tools zu schreiben.
Naja, solange die Aufgaben noch recht übersichtlich sind, ist das doch eine schöne RegExp-Übung.

Außerdem gibt es den sed schon etwas länger als HTML::parser. Bei entsprechend alten Systemen wäre das evtl. die einzige Möglichkeit. Andererseits haben diese dann wahrscheinlich auch nicht viel mit HTML4 zu tun ...
 
Oben