Hi! Ich habe es geschafft mir mit egrep eine Zeile aus einer Datei rauszugreppen, aber ich werde aus der man bzw. info Seite für cut nicht wirklich schlau. Ich möchte alles was zwischen 2 bestimmten Strings liegt angezeigt bekommen. Ich habe es bis jetzt nur mit einzelnen Zeichen geschafft, aber ich finde keinen Hinweis wie so etwas mit Strings geht. Kann mir vielleicht jemand einen Tip geben? mfg Martin
Hallo, Am Sonntag, 2. Dezember 2001 13:23 schrieb Yosuke Tomoe:
Hi!
Ich habe es geschafft mir mit egrep eine Zeile aus einer Datei rauszugreppen, aber ich werde aus der man bzw. info Seite für cut nicht wirklich schlau. Ich möchte alles was zwischen 2 bestimmten Strings liegt angezeigt bekommen. Ich habe es bis jetzt nur mit einzelnen Zeichen geschafft, aber ich finde keinen Hinweis wie so etwas mit Strings geht. Kann mir vielleicht jemand einen Tip geben?
das ist doch eher ein Fall für sed, oder? Z. B.: # sed -n 's/.*string1\(.*\)string2.*/\1/p' Die Eingabe kommt hier entweder von STDIN oder Du kannst sed auch direkt die Datei übergeben und vor dem s/// noch eine Adresse angeben. Das sähe dann so aus: # sed -n '/danach_suche_ich/ s/.*string1\(.*\)string2.*/\1/p' < INFILE ^^^^^^^^^^^^^^^^ regular expression, wie in egrep Je nach Deinen Wünschen kannst Du die ".*" auch noch anpassen. Siehe hierzu z. B. die man page von grep (Oder jede andere Referenz zu regular expressions). Mit freundlichen Grüßen Rudi -- Rudolf Elpelt EMail: elpelt@t-online.de
Rudolf Elpelt wrote (Sonntag, 2. Dezember 2001 14:18):
Am Sonntag, 2. Dezember 2001 13:23 schrieb Yosuke Tomoe:
Ich habe es geschafft mir mit egrep eine Zeile aus einer Datei rauszugreppen, aber ich werde aus der man bzw. info Seite für cut nicht wirklich schlau. Ich möchte alles was zwischen 2 bestimmten Strings liegt angezeigt bekommen. Ich habe es bis jetzt nur mit einzelnen Zeichen geschafft, aber ich finde keinen Hinweis wie so etwas mit Strings geht. Kann mir vielleicht jemand einen Tip geben?
das ist doch eher ein Fall für sed, oder?
Nur für die Fleißigen oder die Sorglosen. ;-) Da sed nur greedy matches beherrscht, ist die Implementation bei einem längeren String für die Endbegrenzung sehr langwierig (außer man legt keinen Wert auf Korrektheit). Mit perl geht vergleichsweise einfach (siehe stingy-match oder minimum-match).
# sed -n 's/.*string1\(.*\)string2.*/\1/p'
Das tut nicht (immer) was es soll. echo "string1 bla1 string2 bla string1 bla2 string2" \ | sed -n 's/.*string1\(.*\)string2.*/\1/p' Das gibt " bla2 " aus. .*string1 matcht "string1 bla1 string2 string1" \(.*\)string2 matcht " bla2 string2" Weiters würde \(.*\)string2 auch " bla2 string2 string2" matchen, wobei "bla2 string2" innerhalb der Klammer wäre. Thomas.
Zuerstmal danke für eure Hilfe. Das mit sed funktioniert prima. Ich wollte es eigentlich zum Versenden für SMS verwenden. Ich habe mir mit wget http://www.sms.at die Hauptseite geholt und dann die URL herausgecutted auf die man beim Click auf "SMS senden" kommt. Die sieht in etwa so aus: http://www.sms.at/messagebox/sms_senden/?4EJAAdbADeeCa (der letzte Teil ist immer verschieden). Wenn ich jetzt mit wget diesen Pfad angebe, dann lädt er zwar immer eine Datei herunter, aber mit dieser Datei kann ich nichts anfangen. Es steht zwar etwas drinnen, aber gewiss nicht das, was angezeigt wird wenn ich es mit einem Browser mache. Hat vielleicht jemand eine Idee? mfg Martin
Moin, * Yosuke Tomoe <yosuke.tomoe@gmx.net> [01-12-02 13:23]:
Ich habe es geschafft mir mit egrep eine Zeile aus einer Datei rauszugreppen, aber ich werde aus der man bzw. info Seite für cut nicht wirklich schlau. Ich möchte alles was zwischen 2 bestimmten Strings liegt angezeigt bekommen. Ich habe es bis jetzt nur mit einzelnen Zeichen geschafft, aber ich finde keinen Hinweis wie so etwas mit Strings geht. Kann mir vielleicht jemand einen Tip geben? awk scheint auch Strings zu akzeptieren: awk -F<bestimmer String> '{print $2;}'
Thorsten -- Nobody will ever need more than 640 kB RAM. -- Bill Gates, 1983 Windows XP requires 64 MB RAM. -- Bill Gates, 2001 Nobody will ever need Windows XP. -- logical conclusion
* Yosuke Tomoe schrieb am 02.Dez.2001:
Ich habe es geschafft mir mit egrep eine Zeile aus einer Datei rauszugreppen, aber ich werde aus der man bzw. info Seite für cut nicht wirklich schlau. Ich möchte alles was zwischen 2 bestimmten Strings liegt angezeigt bekommen. Ich habe es bis jetzt nur mit einzelnen Zeichen geschafft, aber ich finde keinen Hinweis wie so etwas mit Strings geht. Kann mir vielleicht jemand einen Tip geben?
Für sowas solltest Du sed benutzen. Bernd -- Umsteiger von Microsoft Windows xx? Hast Du schon file://usr/doc/howto/de/DE-DOS-nach-Linux-HOWTO.txt gelesen? Auch file://usr/doc/Books/Linuxhandbuch.dvi ist zu empfehlen. |Zufallssignatur 1
participants (5)
-
B.Brodesser@t-online.de
-
Elpelt@t-online.de
-
Thomas Hofer
-
Thorsten Haude
-
Yosuke Tomoe