Hallo, Wie kann ich meine IP-Adresse Auslesen, die ich von T-Online bei jeder Einwahl dynamisch zugewiesen bekomme. Ich möchte nämlich eine HTML-Datei erstellen, die eine Weiterleitung auf meinen Rechner enthält. Ich benötige also nur die IP in Form von xxx.xxx.xxx.xxx. Oder gibt es ein Programm was diese Aufgabe übernehmen kann? Besten Dank Michael -- registered Linux user number 251669
Hallo, /sbin/ifconfig ppp0 | grep "inet addr:" | awk '{print $2}' | cut -c 6- | perl -pe 'chomp;' > /tmp/ip-adresse.txt diese kannst du dann mit cat zu einer html datei basteln, und z.B. per ncftpput hochladen aufn server z.B. cat /pfad/teil1derHTMLseite.tmp /tmp/ip-adresse.txt /teil2derHTMLseite.tmp > /tmp/index.html -- MfG Yann Wissenbach www : http://www.world-wide-wait.de http://www.vw-opel-ig.de mail : yann@world-wide-wait.de ICQ : 98297452 Linux - Life is too short for reboots
-----Original Message----- From: mzenke@web.de [mailto:mzenke@web.de] Sent: Saturday, March 02, 2002 2:39 PM To: SuSE-Mailingliste Subject: IP-Adresse von ppp0 auslesen
Hallo, Wie kann ich meine IP-Adresse Auslesen, die ich von T-Online bei jeder Einwahl dynamisch zugewiesen bekomme. Ich möchte nämlich eine HTML-Datei erstellen, die eine Weiterleitung auf meinen Rechner enthält. Ich benötige also nur die IP in Form von xxx.xxx.xxx.xxx. Oder gibt es ein Programm was diese Aufgabe übernehmen kann?
Besten Dank Michael -- registered Linux user number 251669
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Yann Wissenbach wrote:
Hallo,
/sbin/ifconfig ppp0 | grep "inet addr:" | awk '{print $2}' | cut -c 6- | perl -pe 'chomp;' > /tmp/ip-adresse.txt
diese kannst du dann mit cat zu einer html datei basteln, und z.B. per ncftpput hochladen aufn server
z.B. cat /pfad/teil1derHTMLseite.tmp /tmp/ip-adresse.txt /teil2derHTMLseite.tmp > /tmp/index.html
-- MfG Yann Wissenbach
www : http://www.world-wide-wait.de http://www.vw-opel-ig.de
mail : yann@world-wide-wait.de ICQ : 98297452
Linux - Life is too short for reboots
-----Original Message----- From: mzenke@web.de [mailto:mzenke@web.de] Sent: Saturday, March 02, 2002 2:39 PM To: SuSE-Mailingliste Subject: IP-Adresse von ppp0 auslesen
Hallo, Wie kann ich meine IP-Adresse Auslesen, die ich von T-Online bei jeder Einwahl dynamisch zugewiesen bekomme. Ich möchte nämlich eine HTML-Datei erstellen, die eine Weiterleitung auf meinen Rechner enthält. Ich benötige also nur die IP in Form von xxx.xxx.xxx.xxx. Oder gibt es ein Programm was diese Aufgabe übernehmen kann?
Meines Erachtens geht das noch viel einfacher: www.dyndns.org. Da bekommste einen DNS-Eintrag (z.B. rantanplan.dyndns.org). Jedesmal, wenn sich Dein Rechner einwählt, kannst Du mittels Script (ipcheck.py z.B.) den DNS-Server updaten. Dann brauchst Du in Deiner HTML-Seiter nur noch als Weiterleitung "http://rantanplan.dyndns.org/wasweissich/" angeben. Einen Nachteil hat die Sache: Wenn Du neu eingewählt bist, kann es je nach DNS-Cache sein, daß der Name noch auf die alte Adresse aufgelöst wird. Das gibt sich aber meistens innerhalb ein paar Minuten (vor allem, wenn man fleissig auf "Reload" Klickt :-) ) CU Werner -- "Grub first, then ethics." -- Bertolt Brecht
Hallo, Bitte lass das TOFU, Yann! On Sat, 02 Mar 2002, Yann Wissenbach wrote:
/sbin/ifconfig ppp0 | grep "inet addr:" | awk '{print $2}' | cut -c 6- | perl -pe 'chomp;' > /tmp/ip-adresse.txt
UARGL! Der Schrott ist wohl echt nicht auszurotten! Ich zaehle: grep + awk + cut + perl... Das ist (nach den Benchmarks die ich mal gemacht habe) die langsamste Variante ueberhaupt[1]. Besser: /sbin/ifconfig ppp0 | sed -n 's/.*addr:\([0-9\.]*\).*/\1/p'; -dnh [1] das script mit den diversen Varianten zum testen kannst du ggfs. gerne per PM haben... -- The goal of Computer Science is to build something that will last at least until we've finished building it. -- BSD fortune file
Guten Morgen, David Haller wrote:
On Sat, 02 Mar 2002, Yann Wissenbach wrote:
/sbin/ifconfig ppp0 | grep "inet addr:" | awk '{print $2}' | cut -c 6- | perl -pe 'chomp;' > /tmp/ip-adresse.txt
UARGL! Der Schrott ist wohl echt nicht auszurotten! Ich zaehle: grep + awk + cut + perl... Das ist (nach den Benchmarks die ich mal gemacht habe) die langsamste Variante ueberhaupt[1].
Ack.
Besser:
/sbin/ifconfig ppp0 | sed -n 's/.*addr:\([0-9\.]*\).*/\1/p';
Allerdings habe ich mit den regulären Ausdrücken so meine Probleme - gerade mit sed. Ich habe bisher keine anständige Doku gefunden, die über die völlig trivialen Beispiele hinausgeht ("wer" gegen "was" austauschen usw.) Hast Du Doku dazu, die Du mir per PM zuschicken kannst ? Kennst Du GUTE Links ? Ich möchte gerne mit sed aus /etc/named.conf die beiden forwarders auslesen, also -snip- forwarders { 195.252.143.26; 194.192.187.132; }; -snap- Ich erhalte aber bestenfalls: 195.252.143.26 194.192.187.132; }; ^^^ das will ich NICHT ! Wie macht man das also ? ccD
Am Mit, 06 Mär 2002 schrieb Dennis Leist:
Guten Morgen,
David Haller wrote:
On Sat, 02 Mar 2002, Yann Wissenbach wrote:
/sbin/ifconfig ppp0 | grep "inet addr:" | awk '{print $2}' | cut -c 6- | perl -pe 'chomp;' > /tmp/ip-adresse.txt
UARGL! Der Schrott ist wohl echt nicht auszurotten! Ich zaehle: grep + awk + cut + perl... Das ist (nach den Benchmarks die ich mal gemacht habe) die langsamste Variante ueberhaupt[1].
Ack.
Besser:
/sbin/ifconfig ppp0 | sed -n 's/.*addr:\([0-9\.]*\).*/\1/p';
Ich möchte gerne mit sed aus /etc/named.conf die beiden forwarders auslesen, also -snip-
forwarders { 195.252.143.26; 194.192.187.132; };
-snap-
Ich erhalte aber bestenfalls:
195.252.143.26 194.192.187.132; }; ^^^ das will ich NICHT !
Wie macht man das also ?
Wie und den ersten Strichpunkt schmeißt Du weg? Wie wäre sed -e 's/.*ders {\(.*\)}/\1/'|sed -e 's/;//g' Sind aber immer noch zwei sed Aufrufe, mit sed fällt mir auch gerade keine Möglichkeit ein, daß für eine beliebige Zahl von Forwardern in einemAufruf zu lösen, mit Perl sollte sowas gehen... Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Hallo, On Wed, 06 Mar 2002, Christoph Maurer wrote:
Am Mit, 06 Mär 2002 schrieb Dennis Leist:
/sbin/ifconfig ppp0 | sed -n 's/.*addr:\([0-9\.]*\).*/\1/p';
Ich möchte gerne mit sed aus /etc/named.conf die beiden forwarders auslesen, also -snip-
forwarders { 195.252.143.26; 194.192.187.132; }; [..] Wie macht man das also ?
z.B. mittels: sed 's/[^0-9]*\([0-9.]*\);/\1 /g' Das heisst: gebe nur Zahlen + '.' aus, die nach bel. vielen nicht-Zahlen stehen (die \(\) gruppieren die IP und \1 ist dann der Rueckbezug auf den Inhalt in den \(\), und mach das ganze so oft wie moeglich ("global", wird durch die "option" g gemacht). Eine kompliziertere Version kommt mit der Nachhilfe von 'xargs echo' auch mit Zeilenumbruechen und diversem "Whitespace" klar (und auch mit der ersten Version wie oben): $ echo -e ' \tforwarders { \n\t \t195.252.143.26; \t\n\t\t194.192.187.132;\t \n\t}; \t' \ | sed -n 's/[^0-9]*\([0-9.]*\)/\1 /pg' | xargs echo 195.252.143.26 194.192.187.132 $ echo 'forwarders { 195.252.143.26; 194.192.187.132; };' \ | sed -n 's/[^0-9]*\([0-9.]*\)/\1 /pg' | xargs echo 195.252.143.26 194.192.187.132 Die Version unterscheidet sich von der ersten nur darin, dass erstens die Ausgabe mittels der Option -n unterdruecktwird, und dann explizit die Zeilen mit nem "Match" durch das p hinter s///p ausgegeben werden.
Wie und den ersten Strichpunkt schmeißt Du weg?
Wie wäre sed -e 's/.*ders {\(.*\)}/\1/'|sed -e 's/;//g'
Sind aber immer noch zwei sed Aufrufe,
Geht auch einfacher: sed -e 's/.*ders {\(.*\)}/\1/;s/;//g' ^^^^^^^ zweiter Befehl nach dem s/// Alternativ kann man auch 2mal -e verwenden: sed -e 's/.*ders {\(.*\)}/\1/' -e 's/;//g'
mit sed fällt mir auch gerade keine Möglichkeit ein, daß für eine beliebige Zahl von Forwardern in einemAufruf zu lösen, mit Perl sollte sowas gehen...
s.o. natuerlich geht das, man muss nur die richtigen Muster finden ;) -dnh -- == Re: MS' rules for creating 8.3's out of "long filenames" ==
Rules? There are *rules* for this? And there was I thinking it just inserted a few random characters based on your cat's star-sign, the number of milliseconds since your last bowel movement, and the instantaneous value of the Dow Jones Index! Nothing M$ makes is _that_ accurate. -- Tanuki, Shawn Latimer
Am Mit, 06 Mär 2002 schrieb David Haller:
Hallo,
On Wed, 06 Mar 2002, Christoph Maurer wrote:
Am Mit, 06 Mär 2002 schrieb Dennis Leist:
/sbin/ifconfig ppp0 | sed -n 's/.*addr:\([0-9\.]*\).*/\1/p';
Ich möchte gerne mit sed aus /etc/named.conf die beiden forwarders auslesen, also -snip-
forwarders { 195.252.143.26; 194.192.187.132; }; [..] Wie macht man das also ?
z.B. mittels:
sed 's/[^0-9]*\([0-9.]*\);/\1 /g'
Ist . in sed was anderes als in anderen RegExpressions, bzw. müßte man nicht \. schreiben, oder fällt das in [] weg? Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Hallo, guck mal in meine Firewall von www.wolfgarten.com rein, da habe ich genau sowas realisiert. Sourcen liegen dem Downloadpaket bei... Gruß Sebastian
* Christoph Maurer schrieb am 07.Mär.2002:
Ist . in sed was anderes als in anderen RegExpressions, bzw. müßte man nicht \. schreiben, oder fällt das in [] weg?
in [] gehören nie \ rein, es sei denn Du meinst den \. Sonderbedeutungen innerhalb von [] haben nur ^ - und ]. ^ aber nur wenn es am Anfang steht, - wenn es zwichen zwei andere Zeichen steht und mit ] wird die Klammer geschlossen. Sind diese Zeichen selber gemeint, so darf ^ nicht am Anfang stehen, - muß am Anfang oder am Ende stehen und ] muß unmittelbar nach dem [ bzw. nach dem [^ stehen. Der . hat innerhalb von [] keine Sonderbedeutung, und der \ auch nicht. Bernd -- Was ist quoten? Quoten ist das Zitieren aus einer mail, der man antwortet. Und wie macht man es richtig? Zitate werden mit "> " gekennzeichnet. Nicht mehr als nötig zitieren. Vor den Abschnitten das Zitat, auf das man sich bezieht, mit einer Zeile Abstand oben und unten. |Zufallssignatur 12
* Dennis Leist schrieb am 06.Mär.2002:
Allerdings habe ich mit den regulären Ausdrücken so meine Probleme - gerade mit sed.
man 7 regex
Ich habe bisher keine anständige Doku gefunden, die über die völlig trivialen Beispiele hinausgeht ("wer" gegen "was" austauschen usw.) Hast Du Doku dazu, die Du mir per PM zuschicken kannst ?
Was willst Du wissen? Bei sed ist es so, daß ersetzen mit
s/Suchmuster/Ersetzungsmuster/Modus geht. Außer s gibt es in sed
noch anderes, aber habe ich außer y noch nie verwendet. Lohnt sich
imho auch nicht mehr zu lernen. Für Umfangreicheres lernst Du besser
perl. sed ließt immer Zeilenweise. Es darf somit kein Zeilenumbruch
dazwichen sein. Mann kann da zwar auch was machen, indem man was in
irgendwelche Buffer schreibt, aber da habe ich auch keine Ahnung von
und wie gesagt, sowas macht man besser mit perl.
Das folgende ist aber so oder so nicht verkehrt zu lernen, weil es
so oder so ähnlich auch für perl, grep und andere gilt.
Bei Suchmuster steht was und wie oft. Einzelne Abschnitte können mit
\( ... \) geklammert werden. (Die Punkte gehören nicht zur Syntax)
Was: Hier steht meist jedes Zeichen für sich selber. Etwa
a - steht für a
1 - steht für 1
( - steht für (
usw.
aber:
. - steht für jedes beliebige Zeichen außer Zeilenumbruch.
\x - steht für x
\\ - steht für \
\" - steht für "
\[ - steht für [
\t - steht für ein TAB
^ - als erstes Zeichen steht für Zeilenanfang.
$ - als letztes Zeichen steht für Zeilenende.
\< - steht für Wortanfang
\> - steht für Wortende
Zu bemerken wäre
\
Hallo, On Wed, 06 Mar 2002, Bernd Brodesser wrote:
* Dennis Leist schrieb am 06.Mär.2002:
Allerdings habe ich mit den regulären Ausdrücken so meine Probleme - gerade mit sed.
man 7 regex
Ich habe bisher keine anständige Doku gefunden, die über die völlig trivialen Beispiele hinausgeht ("wer" gegen "was" austauschen usw.) Hast Du Doku dazu, die Du mir per PM zuschicken kannst ?
Was willst Du wissen? Bei sed ist es so, daß ersetzen mit s/Suchmuster/Ersetzungsmuster/Modus geht. Außer s gibt es in sed noch anderes, aber habe ich außer y noch nie verwendet. Lohnt sich imho auch nicht mehr zu lernen. Für Umfangreicheres lernst Du besser perl. sed ließt immer Zeilenweise. Es darf somit kein Zeilenumbruch dazwichen sein. Mann kann da zwar auch was machen, indem man was in irgendwelche Buffer schreibt, aber da habe ich auch keine Ahnung von und wie gesagt, sowas macht man besser mit perl.
Nein. Der Addressmechanismus von sed ist sehr maechtig, zusammen mit i, d, usw. kann man fast alles machen. z.B.: gebe nur die Bodies einer MBox aus: $ sed '/^From /,/^$/d' < irgendne.mbox d.h. loesche alles was du zwischen einem "^From ' und der naechsten Leerzeile findest. Oder man ersetzt den ganzen Block durch einen Hinweis: $ sed '/From /,/^$/c\ ==== header removed ====' < irgendne.mbox oder: $ sed '/From /,/^$/c\ ====\ headers have been removed\ contact privacy@foo.tld for more info\ ====' < irgendne.mbox (ja, diese Schreibweise inkl. den '\' ist wichtig!) Wie man sieht, funktioniert das ganze dann wie ein s/// auf mehreren Zeilen... Und ja, so sehr ich inzwischen perl mag, den Adressoperator vermisse ich oefter...
Das folgende ist aber so oder so nicht verkehrt zu lernen, weil es so oder so ähnlich auch für perl, grep und andere gilt.
Ack!
Bei Suchmuster steht was und wie oft. Einzelne Abschnitte können mit \( ... \) geklammert werden. (Die Punkte gehören nicht zur Syntax)
Wobei man da unterscheiden muss zwischen "basic" und "extended" Regular Expressions (RE) unterscheiden muss. Bei letzteren vertauschen sich die Bedeutungen von Sonderzeichen wie z.B. ( und \( sowie | und \|. "basic" RE verwenden z.B. sed, und grep, "extended" RE verwenden z.B. egrep (bzw. grep -E) und perl. Bsp: will man nach ein paar Woertern in () geklammert suchen geht das mit grep '(\(foo\|bar\|baz\))' egrep '\((foo|bar|baz)\)' Dabei ist jew. das aeussere Klammerpaar ["()" bei grep, "\(\)" bei egrep] die "literale" Klammer(zeichen), und das innere Paar ["\(\)" bei grep, "()" bei egrep] das mit der Sonderbedeutung der Gruppierung (von Alternativen z.B.).
Was: Hier steht meist jedes Zeichen für sich selber. Etwa
a - steht für a 1 - steht für 1 ( - steht für (
Letzteres nur bei "basic" RE. Bei "extendend" steht \( fuer (.
usw.
[viel einer erstklassigen Erklaerung gesnippt]
a\{2,5\} heißt 2 bis 5 mal. Einschließlich. Der Ausdruck steht somit für aa oder aaa oder aaaa oder aaaaa nicht aber für a oder aaaaaa
Auch bei den {} bzw. \{\} gilt das oben zu () gesagte bzgl. "basic" RE und "extended" RE. Bsp: $ echo '110.111.100.1{1,2}' | sed 's/1{1,2}/n/g' 110.111.100.n Basic RE -> die {} sind "literale" { und } ohne Sonderbedeutung $ echo '110.111.100.1{1,2}' | sed 's/1\{1,2\}/n/g' n0.nn.n00.n{n,2} Basic RE -> die \{ \} haben die Sonderbedeutung $ echo '110.111.100.1{1,2}' | perl -pe 's/1{1,2}/n/g' n0.nn.n00.n{n,2} Extended RE -> die {} haben Sonderbedeutung $ echo '110.111.100.1{1,2}' | perl -pe 's/1\{1,2\}/n/g' 110.111.100.n Extended RE -> die \{ \} sind literale { und } ohne Sonderbedeutung [weiter Erstklassiges gesnippt]
* ist das Gleiche wie \{0,\} also beliebig viele, auch Null mal. + ist das Gleiche wie \{1,\} also beliebig viele, aber mindestens ein mal. ? ist das Gleiche wie \{0,1\} also höchstens einmal.
Achtung: das + gibt's nicht immer, z.B. kennen sed und grep das nicht -- egrep und perl aber schon. [..]
Wenn es mehere \(..\) in dem Suchmuster gibt, so steht \1 für die erste Klammer, \2 für die zweite usw.
In perl werden $1 bis $9 statt \1 bis \9 verwendet...
Gilt alles nur für sed, speziell nur für das GNU-sed bei Linux. Bei grep, egrep, vim, perl usw. sieht es ähnlich, aber leider im Deteil oft anders aus. So haben bei sed \(, \{, \< und \| Sonderbedeutungen, während (, {, < und | für sich selber stehen. Bei manchen ist es genau umgekehrt. Auch gibt es nicht immer \{n,m\} usw.
Probier doch einfach mal selber aus:
echo 'irgend etwas' | sed 's/Suchmuster/Ersetzung/'
und spiel damit rum. Die ' sind dafür da, damit nicht die shell schon was setzt. ' selber sollten dann aber nicht vorkommen.
ACK! Achso, noch ein Hinweis zu sed! Der "sed-Befehl" s ist als: s///[modus] dokumentiert, es kann aber jedes andere Zeichen, dass nicht in den Mustern / Ersetzungen vorkommt, verwendet werden, was z.B. bei Pfadersetzungen besonders praktisch ist: for f in /usr/..../foo-1.2/bar/*; do echo "$f" | sed \ 's/\/usr\/\(.*\)\/foo-1.2/\/opt\/foo-2.0\/\2/'; done ist kaum lesbar, da jedes / durch \ maskiert werden muss... Einfacher ist also z.B: for f in /usr/..../foo-1.2/bar/*; do echo "$f" | sed \ 's@/usr/\(.*\)/foo-1.2@/opt/foo-2.0/\2@'; done Hier steht also das @ fuer als "Trenner", also s@@@ statt s///. Haeufiger sieht man auch noch %,: als Trenner (z.B. in configure- scripten). Ich nehme besonders gern "exotische" Zeichen wie ¡¿§¶¯ als Trenner, da auch das @ doch "relativ" haeufig vorkommt (z.B. wenn man email- Adressen in ner Webseite austauschen will ;))... Ein dickes Danke, Bernd! So eine zusammenfassende Erklaerung ist auch dann noch praktisch, wenn man REs staendig verwendet ;) -dnh -- 11. The next best thing to having good ideas is recognizing good ideas from your users. Sometimes the latter is better. --- Eric S. Raymond, "The Cathedral and the Bazaar"
* David Haller schrieb am 06.Mär.2002:
On Wed, 06 Mar 2002, Bernd Brodesser wrote:
Was willst Du wissen? Bei sed ist es so, daß ersetzen mit s/Suchmuster/Ersetzungsmuster/Modus geht. Außer s gibt es in sed noch anderes, aber habe ich außer y noch nie verwendet. Lohnt sich imho auch nicht mehr zu lernen. Für Umfangreicheres lernst Du besser perl. sed ließt immer Zeilenweise. Es darf somit kein Zeilenumbruch dazwichen sein. Mann kann da zwar auch was machen, indem man was in irgendwelche Buffer schreibt, aber da habe ich auch keine Ahnung von und wie gesagt, sowas macht man besser mit perl.
Nein. Der Addressmechanismus von sed ist sehr maechtig, zusammen mit i, d, usw. kann man fast alles machen.
ja, d hatte ich vergessen. Benutze ich auch des öfteren.
z.B.: gebe nur die Bodies einer MBox aus:
$ sed '/^From /,/^$/d' < irgendne.mbox
d.h. loesche alles was du zwischen einem "^From ' und der naechsten Leerzeile findest.
Ja, man kann übrigens anstelle der Adressangabe über Suchstrings auch Zeilennummer angeben. Etwa 1,/^$/d löscht alles bis einschließlich der ersten Leerzeile. Wenn man aber alles von der ersten Zeile bis zum /^From/ gelöscht haben möchte, das /^From/ aber noch drin haben, so geht das zwar auch, aber dann muß man dies mit Buffer machen, oder?
Und ja, so sehr ich inzwischen perl mag, den Adressoperator vermisse ich oefter...
Wieso? es gibt doch .. bzw. ... Ok, man muß ein while drumherum basteln.
* ist das Gleiche wie \{0,\} also beliebig viele, auch Null mal. + ist das Gleiche wie \{1,\} also beliebig viele, aber mindestens ein mal. ? ist das Gleiche wie \{0,1\} also höchstens einmal.
Achtung: das + gibt's nicht immer, z.B. kennen sed und grep das nicht -- egrep und perl aber schon.
Mist, Du hast Recht. Habe ich mal wieder nicht ausprobiert. Mir war + so klar, und bei sed funktioniert es nicht. Merkwürdig das alles. So sehr ich reguläre Ausdrücke mag, so sehr stört es mich, daß es verschiedene Syntaxe gibt, auch wenn sie sich mitlerweile doch erheblich angeglichen haben, so gibt es immer noch Unterschiede. Was bringt eigentlichh noch ein egrep? Will sagen, was kann man mit egrep machen, was man mit grep (ohen -E) nicht machen kann? Ob ich nun ( oder \( sage ist doch letztendlich egal. Die Unterscheidung hat es doch nur gegeben, weil grep schneller war als egrep, weil die Syntaxfinessen natürlich auch Zeit kosten. Daher gibt es ja auch fgrep, daß keine reguläre Ausdrücke kennt. Es ist schneller. Ursprünglich lag grep zwichen fgrep und egrep. Aber ich sehe nicht mehr den Geschwindigkeitsvorteil von grep gegenüber egrep. Hm, mal mit time ausgetestet. Der Unterschied zwichen zwei mal exakt gleichen Kommandos ist teilweise größer als der zwichen egrep und fgrep, auch in meinem Mailarchiv. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
Hallo, On Thu, 07 Mar 2002, Bernd Brodesser wrote:
* David Haller schrieb am 06.Mär.2002:
z.B.: gebe nur die Bodies einer MBox aus:
$ sed '/^From /,/^$/d' < irgendne.mbox
d.h. loesche alles was du zwischen einem "^From ' und der naechsten Leerzeile findest.
Ja, man kann übrigens anstelle der Adressangabe über Suchstrings auch Zeilennummer angeben. Etwa 1,/^$/d löscht alles bis einschließlich der ersten Leerzeile.
Jep. Verwende ich aber kaum, da man erstmal die Zeilennummern kennen muss.
Wenn man aber alles von der ersten Zeile bis zum /^From/ gelöscht haben möchte, das /^From/ aber noch drin haben, so geht das zwar auch, aber dann muß man dies mit Buffer machen, oder?
Hab kurz mal in man sed reingeschaut, scheint so, dass du's so machen musst.
Und ja, so sehr ich inzwischen perl mag, den Adressoperator vermisse ich oefter...
Wieso? es gibt doch .. bzw. ...
Ok, man muß ein while drumherum basteln.
Oh, kannte ich noch garnicht (ok, das .. fuer Zahlen schon, hab aber bisher nie nachgeschaut, was der '..'-operator eigentlich macht ;) *wiederwasgelernt* :)
+ ist das Gleiche wie \{1,\} also beliebig viele, aber mindestens Achtung: das + gibt's nicht immer, z.B. kennen sed und grep das nicht -- egrep und perl aber schon.
Mist, Du hast Recht. Habe ich mal wieder nicht ausprobiert. Mir war + so klar, und bei sed funktioniert es nicht. Merkwürdig das alles.
So sehr ich reguläre Ausdrücke mag, so sehr stört es mich, daß es verschiedene Syntaxe gibt, auch wenn sie sich mitlerweile doch erheblich angeglichen haben, so gibt es immer noch Unterschiede.
Ja. Aber IMO reicht's eigentlich, zwischen "basic" und "extended" zu unterscheiden...
Was bringt eigentlichh noch ein egrep?
Ne andere Syntax ;)
Hm, mal mit time ausgetestet. Der Unterschied zwichen zwei mal exakt gleichen Kommandos ist teilweise größer als der zwichen egrep und fgrep, auch in meinem Mailarchiv.
Bei mir sind alle 3 Kommandos bis auf +-1ms gleich schnell, wenn ich ein "[e]grep -c '^From'" bzw. fgrep -c 'From ' auf das aktuelle suse-linux loslasse (sind 1833 mails)... Wo es _deutliche_ Unterschiede hagelt ist beim (ersten) einlesen der Datei (dann ist sie im cache) und bei der Ausgabe. Insbesondere die Ausgaben braucht relativ viel (zufaellig schwankend) Zeit... Also time mal mit einem >/dev/null oder -q oder -c ;) Ach ja, auf dem Archiv vom Feb. gegreppt schwankt die Zeit etwas mehr (so +- 10ms) die Datei ist aber auch gut 3.3 mal so gross wie die andere ;) Achso: die Schwankungen sind _beim gleichen_ grep! -dnh -- "Wenn sich bei manchen nur so schnell der Kopf mit Verstand füllen würde, wie diese gabeln mit meinen Siggs, dann gäbe es hier viel weniger Daus." [Woko° in dag°]
Hallo Liste, Ich wende mich mal wieder wegen einem sed-Problem an Euch: Zunächst bedanke ich mich bei Bernd für die Mail vom 06.03.2002. Es ist eine der Sorte: LaTex rüber, binden lassen und als Buch verkaufen ! Problem: Ich habe eine Text-Datei, die recht gross ist. In dieser ist eine ZEILE, die mit einem STRING beginnt. Auf diesen STRING folgt eine unbestimmte Anzahl von Leerzeichen (\t und ähnliches). Jetzt folgt eine Zahl - genau die will ich haben ! Beisp.: ZEILE ist: <begin> Dies ist der String: 123456789 <end> Laut Anleitung von Bernd Bernd Brodesser wrote: [...] und sonst gekürzter Fassung:
Es gibt da noch etwas, nämlich:
[[:alpha:]] steht für einen beliebigen Buchstaben. Genaugenommen steht [:alpha:] innerhalb der [...] Klammer für einen beliebigen Buchstaben. Es geht mithin auch [[:alpha:]23] was für einen beliebigen Buchstaben, 2 oder 3 gelten würde. Außer [:alpha:] gibt es natürlich noch anderes, nämlich:
[:alpha:] für Buchstabe [:blank:] für Leerzeichen und Tab [:cntrl:] für ein Kontrollzeichen, eines der ersten 64 ASCII-Zeichen. [:digit:] Eine Ziffer 0-9 [:graph:] alles außer Kontrollzeichen und Blanks. [:space:] Neben Leerzeichen und Tab auch Seitenvorschub u.ä.
Mit diesen \{...\} kann man zwar alles machen, aber doch recht umständlich. Daher gibt es ein paar Abkürzungen:
* ist das Gleiche wie \{0,\} also beliebig viele, auch Null mal. + ist das Gleiche wie \{1,\} also beliebig viele, aber mindestens ein mal. ? ist das Gleiche wie \{0,1\} also höchstens einmal.
Ich nehme \([:blank:]*\), um beliebig mehrfaches Vorkommen von blank-Zeichen zu erkennen.
Weiter kann man auch Gruppieren, und zwar mit \(...\)
Wenn es mehere \(..\) in dem Suchmuster gibt, so steht \1 für die erste Klammer, \2 für die zweite usw.
Jo, will ich nutzen also: cat test.txt | sed 's/.*Dies ist der String:\([:blank:]*\)\([1-9]*\)/\3/g' Leider führt das nicht zum gewünschten Ergbebnis: <Ausgabe> 123456789 </Ausgabe> Man beachte die voranstehenden Leerzeichen ! Die will ich nicht haben. Auch möchte ich die Text-Datei nicht zweimal durch sed schicken, einmal zum Leerzeichen entfernen, das zweite zum Suchen der Zahl. Ich würde es gerne in EINEM Kommando haben. Wer weiss Rat ?
Moin,
* Dennis Leist
Zunächst bedanke ich mich bei Bernd für die Mail vom 06.03.2002. Es ist eine der Sorte: LaTex rüber, binden lassen (...) Finde ich aber nicht OK, daß Du Einzelheiten aus seinem Sexualleben verbreitest.
Thorsten -- There's no such thing as a stupid question. Only stupid people. - User Friendly
* Dennis Leist schrieb am 26.Apr.2002:
Ich habe eine Text-Datei, die recht gross ist. In dieser ist eine ZEILE, die mit einem STRING beginnt. Auf diesen STRING folgt eine unbestimmte Anzahl von Leerzeichen (\t und ähnliches). Jetzt folgt eine Zahl - genau die will ich haben !
Beisp.: ZEILE ist: <begin> Dies ist der String: 123456789 <end>
Ich nehme \([:blank:]*\), um beliebig mehrfaches Vorkommen von blank-Zeichen zu erkennen.
cat test.txt | sed 's/.*Dies ist der String:\([:blank:]*\)\([1-9]*\)/\3/g' ^
Nimm hier mal 2 statt 3. Wundert mich, daß da überhaupt was rauskommt, Du hast doch nur 2 \(...\) Klammern definiert. So sollte es funktionieren: cat test.txt | sed 's/.*Dies ist der String:\([:blank:]*\)\([1-9]*\)/\2/g' Die erste der beiden Klammern ist aber unnötig, Du brauchst sie doch niergends: cat test.txt | sed 's/.*Dies ist der String:[:blank:]*\([1-9]*\)/\1/g' Weiterhin ist cat unnötig, die Datei kann man auch sed mitgeben: sed 's/.*Dies ist der String:[:blank:]*\([1-9]*\)/\1/g' test.txt Das .* am Anfang ist überflüssig. sed 's/Dies ist der String:[:blank:]*\([1-9]*\)/\1/g' test.txt Wenn ich Dich richtig verstanden habe, dann soll der Text "Dies ist der String:" immer am Zeilenanfang stehen. Dann sollte man das auch so sagen. Außerdem kann er dann nicht mehrfach auftreten, so daß das g überflüssig ist. sed 's/^Dies ist der String:[:blank:]*\([1-9]*\)/\1/' test.txt Ich habe das jetzt nicht überprüft. Hoffentlich stimmt es so. Bernd -- Welches Buch ist zu empfehlen? Schon mal bei SuSE vorbeigesehen? http://www.suse.de/de/products/books/index.html oder die Empfehlungen der SuSE-Entwickler auf dem eigenen Rechner? file:///usr/share/doc/sdb/de/html/literatur.html |Zufallssignatur 5
Hallo Dennis, * Dennis Leist schrieb am 26.Apr.2002:
Bernd Brodesser wrote:
sed 's/^Dies ist der String:[:blank:]*\([1-9]*\)/\1/' test.txt
Ich habe das jetzt nicht überprüft. Hoffentlich stimmt es so.
Leider nein. Nichts funktioniert.
Ja, so ist es, wenn man es nicht überprüft. Man übersieht einfach was. Du mußt das [:blank:] in einer [..] Umgebung setzen. Richtig ist: sed 's/^Dies ist der String:[[:blank:]]*\([1-9]*\)/\1/' test.txt Es wird jede Zeile ausgegeben und die Zeilen, auf denen das Muster zutrifft werden geändert. Willst Du das? Wenn Du nur die Zeilen haben willst, auf denen das Muster zutrift, die andern aber nicht, dann mußt Du sed sagen, daß es nicht automatisch ausdrucken soll, (das geht mit der Option -n) und jeder Zeile, die gefunden wird, soll ausgedruckt werden, daher ein p. sed -n 's/^Dies ist der String:[[:blank:]]*\([1-9]*\)/\1/p' test.txt Bernd -- Bei Fragen an die Liste erst mal nachschauen, ob es diese Frage nicht schon einmal gegeben hat. Ein Archiv der Liste findest Du auf: http://lists.suse.com/archives/suse-linux |Zufallssignatur 7
Hallo, Am Mittwoch, 6. März 2002 06:08 schrieb Dennis Leist:
David Haller wrote:
/sbin/ifconfig ppp0 | sed -n 's/.*addr:\([0-9\.]*\).*/\1/p';
Allerdings habe ich mit den regulären Ausdrücken so meine Probleme - gerade mit sed. Ich habe bisher keine anständige Doku gefunden, die über die völlig trivialen Beispiele hinausgeht ("wer" gegen "was" austauschen usw.) Hast Du Doku dazu, die Du mir per PM zuschicken kannst ?
Ich meine, eine Investition, die sich wirklich lohnt:
"sed & awk - kurz & gut", von Arnold Robbins
ISBN: 3-89721-226-9
8,- Euro
(Bitte nicht verwechseln mit dem dicken "sed & awk" für 40 Euro!)
Das hab' ich ständig neben der Tastatur liegen.
Gruß
Bertram
--
Bertram Scharpf
Am Mit, 06 Mär 2002 schrieb Bertram Scharpf:
Am Mittwoch, 6. März 2002 06:08 schrieb Dennis Leist:
David Haller wrote:
/sbin/ifconfig ppp0 | sed -n 's/.*addr:\([0-9\.]*\).*/\1/p';
Allerdings habe ich mit den regulären Ausdrücken so meine Probleme - gerade mit sed. Ich habe bisher keine anständige Doku gefunden, die über die völlig trivialen Beispiele hinausgeht ("wer" gegen "was" austauschen usw.) Hast Du Doku dazu, die Du mir per PM zuschicken kannst ?
Ich meine, eine Investition, die sich wirklich lohnt:
"sed & awk - kurz & gut", von Arnold Robbins ISBN: 3-89721-226-9 8,- Euro (Bitte nicht verwechseln mit dem dicken "sed & awk" für 40 Euro!)
Das dicke sed & awk ist wirklich ausführlich und sehr brauchbar, das kleine kenne ich nicht. IMHO sollte man nur überlegen, ob man nicht lieber gleich perl nimmt, da braucht man nur ein Programm und eine Syntax zu lernen und hat trotzdem sämtliche Funktionalitäten von sed und awk (+ vieles mehr). Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Moin Christoph, * Christoph Maurer schrieb am 06 Mar 2002:
Am Mit, 06 Mär 2002 schrieb Bertram Scharpf:
Am Mittwoch, 6. März 2002 06:08 schrieb Dennis Leist:
Ich meine, eine Investition, die sich wirklich lohnt:
"sed & awk - kurz & gut", von Arnold Robbins ISBN: 3-89721-226-9 8,- Euro (Bitte nicht verwechseln mit dem dicken "sed & awk" für 40 Euro!)
Das dicke sed & awk ist wirklich ausführlich und sehr brauchbar, das kleine kenne ich nicht.
IMHO sollte man nur überlegen, ob man nicht lieber gleich perl nimmt, da braucht man nur ein Programm und eine Syntax zu lernen und hat trotzdem sämtliche Funktionalitäten von sed und awk (+ vieles mehr).
Jeffrey E. F. Friedl "Mastering Regular Expressions" O'Reilly, ISBN 9781565922570 gibts aber auch auf deutsch. Behandelt Regex'es und die verschiedenen Sprachdialekte von perl, sed, awk usw. Gruß, Sebastian -- Do not meddle in the affairs of sysadmins, for they are subtle and quick to anger. Sebastian Helms - http://www.helms.sh - mailto:mail@helms.sh (PGP welcome) SuSE-Linux-Mailinglisten-FAQ: http://www.helms.sh/faq/
Moin,
* Dennis Leist
Allerdings habe ich mit den regulären Ausdrücken so meine Probleme - gerade mit sed. Ich habe bisher keine anständige Doku gefunden, die über die völlig trivialen Beispiele hinausgeht ("wer" gegen "was" austauschen usw.) Das Eulenbuch: http://www.oreilly.de/catalog/regexger/
Thorsten -- There is no drug known to man which becomes safer when its production and distribution are handed over to criminals.
Hallo, * On Sat, Mar 02, 2002 at 02:38 PM (+0100), Michael Zenke wrote:
Wie kann ich meine IP-Adresse Auslesen, die ich von T-Online bei jeder Einwahl dynamisch zugewiesen bekomme.
Zum Beispiel über "ifconfig": ifconfig ppp0 | grep inet | cut -d : -f 2 | cut -d \ -f 1 Ggf. musst Du den Namen des Devices noch anpassen (also statt "ppp0"). HTH! Gruß, Steffen
Hallo, Michael Zenke:
Wie kann ich meine IP-Adresse Auslesen, die ich von T-Online bei jeder Einwahl dynamisch zugewiesen bekomme. Ich möchte nämlich eine HTML-Datei
Geht einfacher. 1. Bei erfolgreicher Einwahl wird die ip von /etc/ppp/ip-up an ./ip-up.local weitergereicht. Häng dein Programm da rein, die IP steht in $4. Ändere nix an der ip-up, sondern nur an der ip-up.local. oder 2. Benutze eine Client für dyndns.org, dann kannst du dir solche Klimmzüge sparen und bist einfach per meinkiste.dyndns.org zu erreichen. Gruß, Ratti
participants (13)
-
B.Brodesser@t-online.de
-
Bertram Scharpf
-
Christoph Maurer
-
David Haller
-
Dennis Leist
-
Michael Zenke
-
Ratti
-
Sebastian Helms
-
Sebastian Wolfgarten
-
Steffen Moser
-
Thorsten Haude
-
Werner Jansen
-
Yann Wissenbach