PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit SED eine Url neu formatieren?



qeldroma
14-12-2006, 10:03
Hallo zusammen,

ich möchte aus "http://ich.bin.eine/url/oder.so;" nur die Domain, also "ich.bin.eine;" übrig haben. Die subdomain muß nicht, kann aber vorhanden sein...

Ich weiß zwar wie ich mit sed etwas ersetze, jedoch nicht, wie ich Teile des Suchstrings ersetze..

Folgendes steht bisher:

sed -e "s/http://([a-zA-Z0-9]*\.)?[a-zA-Z0-9]*.[a-zA-Z0-9]*\/.*;/xxxxxxx/"

Was muß bei xxxxxxx hin? Übrig bleiben soll ja nur noch der "([a-zA-Z0-9]*\.)?[a-zA-Z0-9]*.[a-zA-Z0-9]*"-Part. Ich verstehe diese Backreferences einfach noch nicht so wirklich...

Grüße, Florian

Romanday
14-12-2006, 16:38
Hallo zusammen,

ich möchte aus "http://ich.bin.eine/url/oder.so;" nur die Domain, also "ich.bin.eine;" übrig haben. Die subdomain muß nicht, kann aber vorhanden sein...

Ich weiß zwar wie ich mit sed etwas ersetze, jedoch nicht, wie ich Teile des Suchstrings ersetze..

Folgendes steht bisher:

sed -e "s/http://([a-zA-Z0-9]*\.)?[a-zA-Z0-9]*.[a-zA-Z0-9]*\/.*;/xxxxxxx/"

Was muß bei xxxxxxx hin? Übrig bleiben soll ja nur noch der "([a-zA-Z0-9]*\.)?[a-zA-Z0-9]*.[a-zA-Z0-9]*"-Part. Ich verstehe diese Backreferences einfach noch nicht so wirklich...

Grüße, Florian

Man kann es auch kompliziert machen. Da gibt es richtige Wettbewerbe.:D

awk -F'/' '{print $2$3}'

Waxolunist
14-12-2006, 17:40
Also bei mir funktioniert das hier:



echo http://ich.bin.eine/url/oder.so | sed -e "s/.*\/\/\([^\/]*\).*/\1/g"

Wieso einfach, wenns kompliziert geht, wobei, dass ist ja nun wirklich nicht kompliziert. :)

Romanday
14-12-2006, 18:30
Wieso einfach, wenns kompliziert geht, wobei, dass ist ja nun wirklich nicht kompliziert. :)

Für mich ja auch nicht, bloß ich wende REGEX nur an, wenn es unbedingt
notwendig ist.
Aber hast schon recht, Er wollte ja unbedingt einen SED Befehl haben,
und da geht es nun mal nicht ohne REGEX.

Joghurt
14-12-2006, 20:50
echo http://ich.bin.eine/url/oder.so | sed -e "s/.*\/\/\([^\/]*\).*/\1/g"

Etwas schöner:

echo http://ich.bin.eine/url/oder.so | sed -e "s#.*//\([^/]*\).*#\1#g"Man vergisst gerne, dass man das Trennzeichen nach "s" selbst wählen kann, und das "/" nur Konvention ist.

Waxolunist
15-12-2006, 09:50
Etwas schöner:

echo http://ich.bin.eine/url/oder.so | sed -e "s#.*//\([^/]*\).*#\1#g"Man vergisst gerne, dass man das Trennzeichen nach "s" selbst wählen kann, und das "/" nur Konvention ist.

Vergessen? Gar nicht gewußt!

Vielen Dank @ Joghurt. Wieder was dazu gelernt.

qeldroma
15-12-2006, 11:03
Verstehe!
Alles was ich also in runde Klammern stecke, kann ich dann mit einer Nummerr referenzieren?
Ok!

Wie könnte man denn lösen, daß nur der referenzierte Part in einer weiteren Art und Weise verarbeitet wird?

Z.B. aus "bin" dann "werde" machen?

Dann müßte man ja irgendwie "\1" erneut verarbeiten?

Grüße, Florian

Waxolunist
15-12-2006, 11:35
Am einfachsten einfach weiterverpipen. Alles in einem Kommando kann dann schon sehr unübersichtlich werden.

Ich würde es dann in 3 Untergruppen unterteilen und wieder zusammenfügen.

Ungefähr so:


echo http://ich.bin.eine/url/oder.so | sed -e "s#.*//\([^/]*\).*#\1#g" | sed -e "s#\(.*\)\.\(.*\)\.\(.*\)#\1.werde.\3#g"


Aber ehrlich gesagt, fällt mir im Moment gerade keine elegantere Lösung ein, welche es aber bestimmt gibt. Hab nur im Moment wenig Zeit.

lg, Christian

Romanday
16-12-2006, 05:57
Z.B. aus "bin" dann "werde" machen?

Grüße, Florian

s#.*//\([^.]*\).\([^.]*\).\([^/]*\).*#\1.werde.\3#g

Waxolunist
16-12-2006, 15:30
Des is ja fast desselbe wie ich schon geschrieben habe. Nur etwas länger, da du unnötigerweise die Punkte ausnimmst.

Romanday
16-12-2006, 16:43
Des is ja fast desselbe wie ich schon geschrieben habe. Nur etwas länger, da du unnötigerweise die Punkte ausnimmst.

Stimmt,
hätte ich mir die Arbeit ja sparen können.

Da deine Zeile in Code: Tags eingeschlossen hätte ich horizontal
scrollen müssen um die gesammte SED Anweisung zu sehen.
Hab ich nicht gemacht. Na was solls, mal ne gute Übung.:D

Aber mich würde mal intessieren, wie man:
http://www.mrunix.de/forums/showthread.php?t=48122
mit SED lösen kann?

Waxolunist
18-12-2006, 09:28
Ich bin am überelgen. :)

Man müßte wohl jede newline durch ein space ersetzen, ausser den newline-selects.

Ich überlege und werde bald wieder kommen.

Waxolunist
18-12-2006, 09:35
Ich hab meine Lösung in den anderen Thread geschrieben. :)