Re: sed Problem die 2.
Am Mi 07.09.2005 11:38 schrieb Moritz Karbach <[EMAIL PROTECTED]>: Hallo, > > Ich muß eine Nummer aus folgendem String extrahieren: > wenn du viele solche Sachen machen musst, lohnt sich für dich > vielleicht ein > Blick auf Perl! > --- extract.pl --- > #!/usr/bin/perl > while(<>) > { > if ( m/(([d/-]+))/ ) > { > print $1; > print " "; > } > } > > Und dann: > > $ ./extract.pl < file Danke für deine Hilfe. Ich habe es zwischenzeitlich mit einem Bash-Skript gemacht. Habe schon viel gutes über Perl gehört allerdings habe ich im Moment nicht die Zeit noch eine weitere Sprache zu lernen. Danke! Viele Grüße Sven
Re: sed Problem die 2.
Hi, > Ich muß eine Nummer aus folgendem String extrahieren: wenn du viele solche Sachen machen musst, lohnt sich für dich vielleicht ein Blick auf Perl! zB: --- extract.pl --- #!/usr/bin/perl while(<>) { if ( m/\(([\d\/\-]+)\)/ ) { print $1; print "\n"; } } Und dann: $ ./extract.pl < file - Moritz
Re: sed Problem die 2.
* Sven Gehr <[EMAIL PROTECTED]> [050906 09:56]: > Ich muß eine Nummer aus folgendem String extrahieren: > > > 381 470 M (@# )[92 50 25 0]xS > 573 470 M (0621/48293-91)[50 50 50 50 28 50 50 50 50 50 33 50 0]xS > 1184 470 M ( #@)[25 50 0]xS > > Die Nummer die ich daraus brauche ist die 0621/48293-91. [...] > > In Worte formuliert würde es lauten: > > Nimm alle Zeichen zwischen (@# ) und ( #@). Suche innerhalb dieses ^ Das da ist kein normales Space-Zeichen sondern ein "Hard Space" (0xa0). Soll das wirklich so sein, oder ist das ein Lapsus deines Editors? > Teilstrings nach einer Klammer (..). Der Inhalt in dieser Klammer > ist die gesuchte Nummer im Rohformat die ich mit den sed Befehlen aus > dem ersten Beispiel wieder aufbereiten kann. Ich habe das erste Beispiel zwar nicht verfolgt, aber ich würde das Problem in etwa so lösen: sed '/(@# )/,/( #@)/s/.*(\([-/0-9]*\)).*/\1/;t;d' file Dabei habe ich angenommen, dass der Hard Space in Wirklichkeit ein normales Space darstellen soll und dass die gesuchten Nummern nur Zahlen und die Zeichen "/" und "-" enthalten dürfen. Beste Grüße - Jürgen -- GPG A997BA7A | 87FC DA31 5F00 C885 0DC3 E28F BD0D 4B33 A997 BA7A signature.asc Description: Digital signature
sed Problem die 2.
Hallo zusammen, nachdem ihr mir beim letzten sed-Problem geholfen habt und alles soweit funktioniert habe ich nun ein weiteres das ich mit dem Wissen des 1. leider nicht alleine hin bekomme. Ich weiß nicht ob es mit sed überhaubt funktioniert. Ich muß eine Nummer aus folgendem String extrahieren: 381 470 M (@# )[92 50 25 0]xS 573 470 M (0621/48293-91)[50 50 50 50 28 50 50 50 50 50 33 50 0]xS 1184 470 M ( #@)[25 50 0]xS Die Nummer die ich daraus brauche ist die 0621/48293-91. Der gesamte String ist natürlich lang und die gesuchte Nummer steht immer zwischen dem (@# ) ... und dem ... ( #@) Allerdings kommen zwischen den Einleitung- und Ausleitungs- Zeilen noch verschiedene Zeichen die durch PS-Treiber erzeugt werden. In Worte formuliert würde es lauten: Nimm alle Zeichen zwischen (@# ) und ( #@). Suche innerhalb dieses Teilstrings nach einer Klammer (..). Der Inhalt in dieser Klammer ist die gesuchte Nummer im Rohformat die ich mit den sed Befehlen aus dem ersten Beispiel wieder aufbereiten kann. Ist soetwas mit sed möglich? Viele Grüße Sven
Re: sed - Problem
Hallo, Am Thu, 01 Sep 2005, Sven Gehr schrieb: >Am Mi 31.08.2005 15:27 schrieb Frank Küster <[EMAIL PROTECTED]>: >> Michelle Konzack <[EMAIL PROTECTED]> wrote: >> > Am 2005-08-31 12:55:18, schrieb Sven Gehr: [..] >also alles perfekt. Nun muß ich die zwei Schritte zu einem >zusammenfassen und habe folgendes Skript erstellt: > >#!/bin/sh >PS2ASCII=/usr/bin/ps2ascii >FAXFILE=/usr/lib/cups/backend/out.ps >FAXNUM=`($PS2ASCII $FAXFILE)|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL >PROTECTED]//' -e 's/ ^ ^ die subshell ist ueberfluessig. >//g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g'` >echo $FAXNUM > >wenn ich dieses nun auf die gleiche Ausgangs-Datei (out.ps) anwende >erhalte ich als Ausgabe: > >%%[ProductName:ESPGhostscript]%% @#06214829391 >%%[Page:1]%% %%[LastPage]%% > >Ich finde absolut keinen Fehler. als kleiner Hinweis, dieses PS-File >wurde von einem Windows-Druckertreiber erzeugt. AHA! Les bitte meine anderen Antworten (speziell die in suse-linux). FAXNUM="`${PS2ASCII} \"$FAXFILE\" | tr '\r' '\n' | \ sed 's/^@@ *+/00/;s/[^0-9]\+//g;'`" Das sollte so eigentlich funktionieren -- kann aber sein, dass das mit dem Zeilenende ersetzen nicht gleich korrekt funktioniert, und dass dann die Verankerung der '@@' nicht funktioniert. Achso, du verwendest ja inzwichen @# und #@ (ueberfluessigerweise). Also ggfs. mal folgendes testen: FAXNUM="`${PS2ASCII} \"$FAXFILE\" | tr '\r' '\n' | \ sed 's/@# *+/00/;s/[^0-9]\+//g;'`" Falls das zuviel erwischt, schau dir meine anderen Mails nochmal genauer an. Spontan mit deinen geaenderten Anforderungen wuerde ich auch noch folgendes probieren (ungetestet!): FAXNUM="`${PS2ASCII} \"$FAXFILE\" | tr '\r' '\n' | \ sed '/@#.*#@/ { s/.*\(@[EMAIL PROTECTED]).*/\1/; s/[EMAIL PROTECTED] *+/00/; s/[^0-9]\+//g; }'`" Hm. Wie sieht das PS denn konkret aus? Kannst du da mal ein Beispiel der relevanten Stelle mailen? Ich denke, das PS2ASCII ist ueberfluessig und die Nummer laesst sich direkt aus dem PS rauslesen. BTW: awk waere speziell dann ueberlegenswert (ungetestet!): FAXNUM="`awk ' BEGIN { RS="[\r\n]"; ## nimmt \r und \n und \r\n als Zeileumbruch, aber ## ungetestet, ersetzt also das 'tr'. } /@#.*#@/ { $0 = gensub(/[EMAIL PROTECTED](.*)[EMAIL PROTECTED]/, "\\1", 0); sub(/^ *\+ */, "00", $0); print gensub(/[^0-9]/, "", "g"); }' \"$FAXFILE\"`" HTH, -dnh -- Treat your password like your toothbrush. Don't let anybody else use it, and get a new one every six months. -- Clifford Stoll [found in ssl_engine_pphrase.c] -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed - Problem
Am Do 01.09.2005 11:06 schrieb Michelle Konzack <[EMAIL PROTECTED]>: > Am 2005-09-01 10:03:02, schrieb Sven Gehr: > > > also alles perfekt. Nun muß ich die zwei Schritte zu einem > > zusammenfassen und habe folgendes Skript erstellt: > > > > #!/bin/sh > > PS2ASCII=/usr/bin/ps2ascii > > FAXFILE=/usr/lib/cups/backend/out.ps > > FAXNUM=`($PS2ASCII $FAXFILE)|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL > > PROTECTED]//' -e 's/ > > > FAXNUM=`$PS2ASCII $FAXFILE |sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL > PROTECTED]//' -e 's/ > ^^^ > > //g' -e 's/^+49/0/' -e 's/^+/00/' -e 'sg' -e 's/-//g'` > > echo $FAXNUM hat leider nichts gebracht. Nochimmer die gleiche, falsche Ausgabe: @# 06214829391 #@ Hallo Fax, ich bin's der Faxmeister. ^L%%[Page: 1]%% %%[LastPage]%% -
Re: sed - Problem
Am 2005-09-01 10:03:02, schrieb Sven Gehr: > also alles perfekt. Nun muß ich die zwei Schritte zu einem > zusammenfassen und habe folgendes Skript erstellt: > > #!/bin/sh > PS2ASCII=/usr/bin/ps2ascii > FAXFILE=/usr/lib/cups/backend/out.ps > FAXNUM=`($PS2ASCII $FAXFILE)|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL > PROTECTED]//' -e 's/ FAXNUM=`$PS2ASCII $FAXFILE |sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' -e 's/ ^^^ > //g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g'` > echo $FAXNUM > Viele Grüße > Sven Greetings Michelle -- Linux-User #280138 with the Linux Counter, http://counter.li.org/ Michelle Konzack Apt. 917 ICQ #328449886 50, rue de Soultz MSM LinuxMichi 0033/3/8845235667100 Strasbourg/France IRC #Debian (irc.icq.com) signature.pgp Description: Digital signature
Re: sed - Problem
Am Mi 31.08.2005 15:27 schrieb Frank Küster <[EMAIL PROTECTED]>: > Michelle Konzack <[EMAIL PROTECTED]> wrote: > > Am 2005-08-31 12:55:18, schrieb Sven Gehr: Hallo zusammen, bin auf ein weiteres Problem mit meinem Skript (sed) gestoßen welches absolut komisch ist, zumindest für mich. Ausgangsmaterial ist eine Postscript-Datei. Wenn ich diese mit: ps2ascii out.ps out.txt in ASCII konvertieren enthält diese: - @# 06214829391 #@ Hallo Fax, ich bin's der Faxmeister. ^L%%[Page: 1]%% %%[LastPage]%% - wenn ich anschliesend mein Skript: #!/bin/sh # txt2number PS2ASCII=/usr/bin/ps2ascii TEMPFILE=/usr/lib/cups/backend/out.txt FAXFILECONTEND=$(cat $TEMPFILE) FAXNUM=`echo $FAXFILECONTEND|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' -e 's/ //g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g'` echo $FAXNUM darauf anwende erhalte ich die Ausgabe: 06214829391 also alles perfekt. Nun muß ich die zwei Schritte zu einem zusammenfassen und habe folgendes Skript erstellt: #!/bin/sh PS2ASCII=/usr/bin/ps2ascii FAXFILE=/usr/lib/cups/backend/out.ps FAXNUM=`($PS2ASCII $FAXFILE)|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' -e 's/ //g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g'` echo $FAXNUM wenn ich dieses nun auf die gleiche Ausgangs-Datei (out.ps) anwende erhalte ich als Ausgabe: %%[ProductName:ESPGhostscript]%% @#06214829391 %%[Page:1]%% %%[LastPage]%% Ich finde absolut keinen Fehler. als kleiner Hinweis, dieses PS-File wurde von einem Windows-Druckertreiber erzeugt. Wenn ich das PS-File vom Linux-Druckertreiber erzeugen lasse funktioniert auch das 2. Skript was die Nummer extrahiert. Ich versteh's einfach nicht. Viele Grüße Sven
Re: sed - Problem
Hallo, Am Wed, 31 Aug 2005, Michelle Konzack schrieb: >Am 2005-08-31 11:52:03, schrieb Mario 'BitKoenig' Holbe: >> Michelle Konzack <[EMAIL PROTECTED]> wrote: >> > Am 2005-08-31 11:23:33, schrieb Christian Frommeyer: >> >> sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g' -e 's/\s*+/00/' -e >> >> 's/[^0-9]//g' >> > Das ist aber nicht gut... >> > Besser: >> > sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g;s/\s*+/00/;s/[^0-9]//g' Ist '-r' portabel? $ zgrep -- '\-r' `man -w sed` and the bug-reporting address, After the address (or address-range), executed if the address (or address-range) does >> Rein interessehalber... Warum ist das nicht gut? Gibts da irgendwelche >> Unterschiede zwischen beiden Varianten? > >"-e" spannt jedesmal einen neune einen editor Was? >Du kannst aber alle aktionen Zeile für Zeile in eine Datei schreiben >und "sed" mit > >sed --script-file $ sed --script-file /dev/null sed: unrecognized option `--script-file' [...] 'sed -f' oder bei GNU-sed: 'sed --file' Es geht uebrigens auch: ,[ delemptylines ] | #!/usr/bin/sed -f | /^[[:space:]]*$/d ` Noch nen 'chmod u+x' hinterher und feddich. Praktisch hinter einem 'cpp' (oder 'gcc -E') ohne '-o'. $ echo -e '#include \nUTS_RELEASE\n' \ | gcc -E - | delemptylines >aufrufen und sed arbeitet dann eine Zeile nach der anderen ab. >Auf der Commandline, wird das dann so angegeben wie ich es gemacht habe, >also > >-e "first;second;third;..." > >jede Aktion also mit ";" getrennt. Oder durch einen Zeilenumbruch. Genau wie in einem sed-script. $ seq 1 9 | sed -n '1 { s/1/X/ p } 5p' X 5 HTH & HAND, -dnh -- When I woke up this morning, the cat was barfing on me. Things have gone downhill since then. -- Michel Buijsman -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed - Problem
Michelle Konzack <[EMAIL PROTECTED]> wrote: > Am 2005-08-31 12:55:18, schrieb Sven Gehr: > >> Nun wollte ich das Ganze in ein Skript einbauen und habe so meine >> Probleme damit. >> >> #!/bin/sh >> FAXFILE=/usr/lib/cups/backend/doc155.txt >> FAXNUME=$FAXFILE|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' >> -e 's/ //g' -e >> 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g' >> echo $FAXNUM > > Probiers mal mit: > > FAXNUME=`cat $FAXFILE |sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL > PROTECTED]//' -e 's/ //g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e > 's/-//g'` Useless use of cat sed -e ' ... ' $FAXFILE Und wenn man mal ein Kommando hat, dass seine Eingaben nur von stdin annimmt und nicht aus einer Datei lesen kann, ist commando --parameter ... < $FAXFILE immer noch besser. Gruß, Frank -- Frank Küster Inst. f. Biochemie der Univ. Zürich Debian Developer
Re: sed - Problem
On 31.Aug 2005 - 14:18:00, Michelle Konzack wrote: > Am 2005-08-31 12:55:18, schrieb Sven Gehr: > > > Nun wollte ich das Ganze in ein Skript einbauen und habe so meine > > Probleme damit. > > > > #!/bin/sh > > FAXFILE=/usr/lib/cups/backend/doc155.txt > > FAXNUME=$FAXFILE|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' > > -e 's/ //g' -e > > 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g' > > echo $FAXNUM > > Probiers mal mit: > > FAXNUME=`cat $FAXFILE |sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL > PROTECTED]//' -e 's/ //g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e > 's/-//g'` Michelle, das haette ich von dir nicht erwartet - useless use of cat, sed ... < $FAXFILE oder sed ... $FAXFILE funktioniert ebenso und beansprucht einen Prozess weniger. Andreas -- You are wise, witty, and wonderful, but you spend too much time reading this sort of trash. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed - Problem
Am 2005-08-31 12:55:18, schrieb Sven Gehr: > Nun wollte ich das Ganze in ein Skript einbauen und habe so meine > Probleme damit. > > #!/bin/sh > FAXFILE=/usr/lib/cups/backend/doc155.txt > FAXNUME=$FAXFILE|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' -e > 's/ //g' -e > 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g' > echo $FAXNUM Probiers mal mit: FAXNUME=`cat $FAXFILE |sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' -e 's/ //g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g'` Greetings Michelle -- Linux-User #280138 with the Linux Counter, http://counter.li.org/ Michelle Konzack Apt. 917 ICQ #328449886 50, rue de Soultz MSM LinuxMichi 0033/3/8845235667100 Strasbourg/France IRC #Debian (irc.icq.com) signature.pgp Description: Digital signature
Re: sed - Problem
Am Mi 31.08.2005 12:55 schrieb Sven Gehr <[EMAIL PROTECTED]>: Hallo, [...] > Nun wollte ich das Ganze in ein Skript einbauen und habe so meine > Probleme damit. > > > #!/bin/sh > FAXFILE=/usr/lib/cups/backend/doc155.txt > FAXNUME=$FAXFILE|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' -e > 's/ //g' -e > 's/^+49/0/' -e 's/^+/00/' -e 'sg' -e 's/-//g' > echo $FAXNUM > > In der Datei doc155.txt steht genau die Zeichenkette drin wie ich sie > die ganze Zeit mit echo... übergeben habe. Wenn ich das Skript > ausführe > wird jedoch nichts ausgegeben. Wie muß ich das zuweisen? hab's heraus gefunden. Viele Grüße Sven
Re: sed - Problem
Am Mi 31.08.2005 11:26 schrieb Michelle Konzack <[EMAIL PROTECTED]>: > Am 2005-08-31 09:41:13, schrieb Sven Gehr: Vielen Dank für die Vorschläge. In der zwischenzeit habe ich viel mit sed herum probiert und habe noch einiges geändert. Die Zeichen die den Anfang und das Ende markieren kann ich ja selbst steuern da diese durch die Aplikation in das File geschrieben werden. Ich hielt es für besser wenn ich für Anfang und Ende nicht die gleichen nehme sonder unterschiedliche: @# -> markiert den Anfang # @ -> markiert das Ende Mit: echo "bla bla @# +49 621 / 4829-399 #@ bla bla" |sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' -e 's/ //g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g' erhalte ich dann: 06214829399 Das einzigste was bei der Lösung nicht funktioniert ist eine Prüfung auf weiter Sonderzeichen, Buchstaben etc. Das wäre jedoch in anbetracht des Verwendungszwecks nicht tragisch. Bei den Zahlen handelt es sich, wie sich der ein oder andere bestimmt schon gedacht hat, um Faxnummern. Diese werden aus unsere Datenbank eingemischt. Wenn da Buchstaben oder Sondernzeichen enthalten sind stimmt die Nummer ja ohnehin nicht und braucht auch nicht weiter verarbeitet zu werden. Nun wollte ich das Ganze in ein Skript einbauen und habe so meine Probleme damit. #!/bin/sh FAXFILE=/usr/lib/cups/backend/doc155.txt FAXNUME=$FAXFILE|sed -e 's/[EMAIL PROTECTED]//' -e 's/[EMAIL PROTECTED]//' -e 's/ //g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g' echo $FAXNUM In der Datei doc155.txt steht genau die Zeichenkette drin wie ich sie die ganze Zeit mit echo... übergeben habe. Wenn ich das Skript ausführe wird jedoch nichts ausgegeben. Wie muß ich das zuweisen? Viele Grüße Sven
Re: sed - Problem
Am 2005-08-31 11:52:03, schrieb Mario 'BitKoenig' Holbe: > Michelle Konzack <[EMAIL PROTECTED]> wrote: > > Am 2005-08-31 11:23:33, schrieb Christian Frommeyer: > >> sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g' -e 's/\s*+/00/' -e > >> 's/[^0-9]//g' > > Das ist aber nicht gut... > > Besser: > > sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g;s/\s*+/00/;s/[^0-9]//g' > > Rein interessehalber... Warum ist das nicht gut? Gibts da irgendwelche > Unterschiede zwischen beiden Varianten? "-e" spannt jedesmal einen neune einen editor Du kannst aber alle aktionen Zeile für Zeile in eine Datei schreiben und "sed" mit sed --script-file aufrufen und sed arbeitet dann eine Zeile nach der anderen ab. Auf der Commandline, wird das dann so angegeben wie ich es gemacht habe, also -e "first;second;third;..." jede Aktion also mit ";" getrennt. > regards >Mario Greetings Michelle -- Linux-User #280138 with the Linux Counter, http://counter.li.org/ Michelle Konzack Apt. 917 ICQ #328449886 50, rue de Soultz MSM LinuxMichi 0033/3/8845235667100 Strasbourg/France IRC #Debian (irc.icq.com) signature.pgp Description: Digital signature
Re: sed - Problem
On Wednesday 31 August 2005 09:41, Sven Gehr wrote: > Hallo zusammen, > > ich habe ein Problem mit sed. Die Problemstellung ist wie folgt: > > In einem Textfile stehen an einer nicht exakt definierten Position ein > String der mit @@ beginnt und mit @@ endet. Der Teil der zwischen diesen > @@'s steht soll extrahiert werden und unformatiert werden. Beim > umfarmatieren sollen folgende Regeln angewendet werden: > > 1.) Ein führendes + Zeichen soll durch 00 ersetzt werden. Das soll > lediglich mit einem + Zeichen passieren das ganz am Anfang steht. Tauch > dieses Zeichen innerhalb des Strings nocheinmal auf wird es wie ein > Sonderzeichen behandelt und entfernt (siehe unten). Zu beachten ist. Das > zwichem dem + und den @@-Zeichen die den Anfang markieren durchaus ein > Leerzeichen stehen kann. Die Zeichenkette kann also wie folgt beginnen: > > @@+ > @@ + Das macht z.B. sed -e 's/\([^,]*\)+/\100/' sedtest spuckt aus: @@00 @@ 00 [^,] soll heißen: alles außer einem Komma, also z.B. @ In dem Stil kannst du dann weiter machen Eilige Grüße geb > > Viele Grüße > Sven -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed - Problem
Michelle Konzack <[EMAIL PROTECTED]> wrote: > Am 2005-08-31 11:23:33, schrieb Christian Frommeyer: >> sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g' -e 's/\s*+/00/' -e >> 's/[^0-9]//g' > Das ist aber nicht gut... > Besser: > sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g;s/\s*+/00/;s/[^0-9]//g' Rein interessehalber... Warum ist das nicht gut? Gibts da irgendwelche Unterschiede zwischen beiden Varianten? regards Mario -- Uebrigens... Wer frueher stirbt ist laenger tot! -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed - Problem
Am 2005-08-31 11:23:33, schrieb Christian Frommeyer: > Also wenn nichts gegen mehrere Ausdrücke spricht probier doch mal: > > 's/.*@@([EMAIL PROTECTED])@@.*/\1/g' > 's/\s*+/00/' > 's/[^0-9]//g' > > also z.B. mit > > sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g' -e 's/\s*+/00/' -e > 's/[^0-9]//g' Das ist aber nicht gut... Besser: sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g;s/\s*+/00/;s/[^0-9]//g' Greetings Michelle -- Linux-User #280138 with the Linux Counter, http://counter.li.org/ Michelle Konzack Apt. 917 ICQ #328449886 50, rue de Soultz MSM LinuxMichi 0033/3/8845235667100 Strasbourg/France IRC #Debian (irc.icq.com) signature.pgp Description: Digital signature
Re: sed - Problem
Am 2005-08-31 09:41:13, schrieb Sven Gehr: > Hallo zusammen, > > ich habe ein Problem mit sed. Die Problemstellung ist wie folgt: > sed -r > 's/@@\s*?\+([0-9]+)\s*?([0-9]+)[^0-9]*?([0-9]+)\/?([0-9]+)?@@/00\1\2\3\4/g' > Mache ich ein: > > echo @@+49621 4829/399@@bla bla bla|sed . erhalte ich: > > 00496214829399bla bla bla > Kenn sich jemand mit sed aus und kann mir sagen wo mein Fehler ist? wie währe es mit: echo "@@+49621 4829/399@@bla bla bla" |sed -r 's/@@\s*?\+([0-9]+)\s*?([0-9]+)[^0-9]*?([0-9]+)\/?([0-9]+)?@@.*/00\1\2\3\4/g' Da kriegste dann 00496214829399 > Viele Grüße > Sven Greetings Michelle -- Linux-User #280138 with the Linux Counter, http://counter.li.org/ Michelle Konzack Apt. 917 ICQ #328449886 50, rue de Soultz MSM LinuxMichi 0033/3/8845235667100 Strasbourg/France IRC #Debian (irc.icq.com) signature.pgp Description: Digital signature
Re: sed - Problem
Am Mittwoch 31 August 2005 09:41 schrieb Sven Gehr: [sed-Wunsch] > echo @@+49621 4829/399@@bla bla bla|sed . erhalte ich: > 00496214829399bla bla bla Also wenn nichts gegen mehrere Ausdrücke spricht probier doch mal: 's/.*@@([EMAIL PROTECTED])@@.*/\1/g' 's/\s*+/00/' 's/[^0-9]//g' also z.B. mit sed -r -e 's/.*@@([EMAIL PROTECTED])@@.*/\1/g' -e 's/\s*+/00/' -e 's/[^0-9]//g' Das tut hier. Gruß Chris -- A: because it distrupts the normal process of thought Q: why is top posting frowned upon
Re: sed - Problem
Sven Gehr <[EMAIL PROTECTED]> wrote: > 2.) Nachdem ein evtl. vorhandenes + Zeichen am Anfang umgesetzt ist > sollen alle Zeichen die keine Zahl sind (Leerzeichen, /, - etc.) > entfernt werden. > > Ich bin nicht unbedingt der sed-Profi. Was ich bisher hinbekommen habe > ist: > > sed -r > 's/@@\s*?\+([0-9]+)\s*?([0-9]+)[^0-9]*?([0-9]+)\/?([0-9]+)?@@/00\1\2\3\4/g' > > Diese Syntax enthält jedoch noch Fehler und ich bekomm's einfach nicht > hin. Das mit @@ gekennzeichnete Ende wird nicht erkannt: > > Mache ich ein: > > echo @@+49621 4829/399@@bla bla bla|sed . erhalte ich: > > 00496214829399bla bla bla Hilft dir echo etwas davor @@+49621 4829/399@@bla bla bla|sed 's/.*\(@@.*@@\).*/\1/g' weiter? Für das Löschen der Sonderzeichen würde ich nicht sed, sondern tr nehmen. Gruß, Frank -- Frank Küster Inst. f. Biochemie der Univ. Zürich Debian Developer
sed - Problem
Hallo zusammen, ich habe ein Problem mit sed. Die Problemstellung ist wie folgt: In einem Textfile stehen an einer nicht exakt definierten Position ein String der mit @@ beginnt und mit @@ endet. Der Teil der zwischen diesen @@'s steht soll extrahiert werden und unformatiert werden. Beim umfarmatieren sollen folgende Regeln angewendet werden: 1.) Ein führendes + Zeichen soll durch 00 ersetzt werden. Das soll lediglich mit einem + Zeichen passieren das ganz am Anfang steht. Tauch dieses Zeichen innerhalb des Strings nocheinmal auf wird es wie ein Sonderzeichen behandelt und entfernt (siehe unten). Zu beachten ist. Das zwichem dem + und den @@-Zeichen die den Anfang markieren durchaus ein Leerzeichen stehen kann. Die Zeichenkette kann also wie folgt beginnen: @@+ @@ + 2.) Nachdem ein evtl. vorhandenes + Zeichen am Anfang umgesetzt ist sollen alle Zeichen die keine Zahl sind (Leerzeichen, /, - etc.) entfernt werden. Ich bin nicht unbedingt der sed-Profi. Was ich bisher hinbekommen habe ist: sed -r 's/@@\s*?\+([0-9]+)\s*?([0-9]+)[^0-9]*?([0-9]+)\/?([0-9]+)?@@/00\1\2\3\4/g' Diese Syntax enthält jedoch noch Fehler und ich bekomm's einfach nicht hin. Das mit @@ gekennzeichnete Ende wird nicht erkannt: Mache ich ein: echo @@+49621 4829/399@@bla bla bla|sed . erhalte ich: 00496214829399bla bla bla Selbst wenn ich hinter der 2. @@-Kette keine Zeichen mehr übergebe ibt es Varianten die nicht funktionieren: @@+49621/4829-399@@ -> @@+49621/4829-399@@ @@+49621/4829 399@@ -> @@+49621/4829 399@@ Kenn sich jemand mit sed aus und kann mir sagen wo mein Fehler ist? Viele Grüße Sven
Re: sed problem
Hallo Andre, Am 21:46 2002-12-17 +0100 hat Andre Fischer geschrieben: > >hallöchen, >ich glaub mein sed kann nicht mehr zählen :( > >ich möchte die Zahlenfolge "12345" durch "PLZ" ersetzen und habe folgenden >Test gemacht: >echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g > >und habe folgendes Ergebnis erwartet: "test PLZ test" leider kommt "test 12345 >test" - was mach ich da falsch? Die beispiele im Buch basieren soviel ich weis auf /bin/tcsh. Wenn du /bin/bash verwendest, must Du den String in Hochkommas setzen, also: echo "test 12345 test" | sed 's/[0-9]\{5\}/PLZ/g' ^ ^ hierund hier >tschau fisch Bis ein anderes mal Michelle -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed problem
Am Dienstag, 17. Dezember 2002 22:50 schrieb [EMAIL PROTECTED]: > Andre Fischer schrieb: > > ich möchte die Zahlenfolge "12345" durch "PLZ" ersetzen und habe > > folgenden Test gemacht: > > echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g > > > > und habe folgendes Ergebnis erwartet: "test PLZ test" leider kommt "test > > 12345 test" - was mach ich da falsch? > > $ echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g > test 12345 test > $ echo "test 12345 test" | sed 's/[0-9]\{5\}/PLZ/g' > test PLZ test > > Vor dem sed hängt noch die bash, vermute ich. > > Nebenbei: um der bash ein TAB für (z.B.) sed mitzuteilen, hilft > "Strg-v TABTaste". > > Durch fehlende '' und ggf. der TAB-Geschichte kann man sich eine ganze > Weile ergebnislos mit dem sed amüsieren. danke das wars, nicht sed sondern bash warn schuld :) tschau fisch -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed problem
Andreas Wodrich wrote: fisch wrote: Am Dienstag, 17. Dezember 2002 22:08 schrieb Wolfgang Erig: On Tue, Dec 17, 2002 at 09:46:30PM +0100, Andre Fischer wrote: ich glaub mein sed kann nicht mehr zählen :( ich möchte die Zahlenfolge "12345" durch "PLZ" ersetzen und habe folgenden Test gemacht: echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g wenn ich mich recht erinnere, kann sed nicht den Multiplikator, er kann hier wirklich nicht zählen :) Bei mir geht echo "test 12345 test" | sed s/[0-9][0-9][0-9][0-9][0-9]/PLZ/g laut "Linux in a Nutshell" solls aber gehn :( ich brauche letztendlich folgendes: "irgendwas TRENNZEICHEN12345 irgendwas anderesTRENNZEICHEN" ->"irgendwas TRENNZEICHEN12345TRENNZEICHENirgendwas anderesTRENNZEICHEN" wobei hier 12345 für eine PLZ steht und das ganze auf eine Textdatei angewendet werden muß Wolfgang Soweit ich es aus der Docu zu sed herauslese, kann s/../../ nicht als Parameter uebergeben werden. Ich hatte leider nicht weit genug gelesen: man sed: ... If no -e,-f,--expression, or --file options are given on the command- line, then the first non-option argument on the command line is taken to be the script to be executed. ... Aber das script unten funktioniert (;-). Es muss eine Datei angelegt werden, in der dieser Befehl abgelegt wird. z.B vi sedscript eine Zeile mit s/[0-9]\{5\}/PLZ/g einfuegen, abspeichern. echo "test 12345 test" | sed -f sedscript liefert: test PLZ test Gruss Andreas -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed problem
fisch wrote: Am Dienstag, 17. Dezember 2002 22:08 schrieb Wolfgang Erig: On Tue, Dec 17, 2002 at 09:46:30PM +0100, Andre Fischer wrote: ich glaub mein sed kann nicht mehr zählen :( ich möchte die Zahlenfolge "12345" durch "PLZ" ersetzen und habe folgenden Test gemacht: echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g wenn ich mich recht erinnere, kann sed nicht den Multiplikator, er kann hier wirklich nicht zählen :) Bei mir geht echo "test 12345 test" | sed s/[0-9][0-9][0-9][0-9][0-9]/PLZ/g laut "Linux in a Nutshell" solls aber gehn :( ich brauche letztendlich folgendes: "irgendwas TRENNZEICHEN12345 irgendwas anderesTRENNZEICHEN" ->"irgendwas TRENNZEICHEN12345TRENNZEICHENirgendwas anderesTRENNZEICHEN" wobei hier 12345 für eine PLZ steht und das ganze auf eine Textdatei angewendet werden muß Wolfgang Soweit ich es aus der Docu zu sed herauslese, kann s/../../ nicht als Parameter uebergeben werden. Es muss eine Datei angelegt werden, in der dieser Befehl abgelegt wird. z.B vi sedscript eine Zeile mit s/[0-9]\{5\}/PLZ/g einfuegen, abspeichern. echo "test 12345 test" | sed -f sedscript liefert: test PLZ test Gruss Andreas -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed problem
On Tue, Dec 17, 2002 at 10:15:11PM +0100, fisch wrote: > > > echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g > > > > wenn ich mich recht erinnere, kann sed nicht den > > Multiplikator, er kann hier wirklich nicht zählen :) > > laut "Linux in a Nutshell" solls aber gehn :( hmm, man soll "man ed" für die reg-Expr. des "sed" machen. Der "ed" kann demnach die Zähler, aber "ed" kann mehr als "sed". Wahrscheinlich gehören die Zähler zu den Unterschieden!? und der Autor hat bei "ed" abgeschrieben. > > ich brauche letztendlich folgendes: > > "irgendwas TRENNZEICHEN12345 irgendwas anderesTRENNZEICHEN" ->"irgendwas > TRENNZEICHEN12345TRENNZEICHENirgendwas anderesTRENNZEICHEN" > > wobei hier 12345 für eine PLZ steht und das ganze auf eine Textdatei > angewendet werden muß > Bin mir unsicher, ob ich Deine Anfordeung richtig verstanden habe, aber probier mal echo "irgendwas TRENNZEICHEN12345 irgendwas anderesTRENNZEICHEN" | sed 's/\(TRENNZEICHEN\)\([0-9][0-9][0-9][0-9][0-9]\) /\ \1\2\1/' -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed problem
Hallo, Andre Fischer <[EMAIL PROTECTED]>: >echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g >und habe folgendes Ergebnis erwartet: "test PLZ test" leider kommt >"test 12345 test" - was mach ich da falsch? Deine Shell verschluckt die Backslashes. Probiere es mal mit echo "test 12345 test" | sed 's/[0-9]\{5\}/PLZ/g' Gruß, Harald -- Harald Weidner [EMAIL PROTECTED] -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed problem
Am Dienstag, 17. Dezember 2002 22:08 schrieb Wolfgang Erig: > On Tue, Dec 17, 2002 at 09:46:30PM +0100, Andre Fischer wrote: > > ich glaub mein sed kann nicht mehr zählen :( > > > > ich möchte die Zahlenfolge "12345" durch "PLZ" ersetzen und habe > > folgenden Test gemacht: > > echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g > > wenn ich mich recht erinnere, kann sed nicht den > Multiplikator, er kann hier wirklich nicht zählen :) > Bei mir geht > echo "test 12345 test" | sed s/[0-9][0-9][0-9][0-9][0-9]/PLZ/g laut "Linux in a Nutshell" solls aber gehn :( ich brauche letztendlich folgendes: "irgendwas TRENNZEICHEN12345 irgendwas anderesTRENNZEICHEN" ->"irgendwas TRENNZEICHEN12345TRENNZEICHENirgendwas anderesTRENNZEICHEN" wobei hier 12345 für eine PLZ steht und das ganze auf eine Textdatei angewendet werden muß > > Wolfgang -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: sed problem
On Tue, Dec 17, 2002 at 09:46:30PM +0100, Andre Fischer wrote: > ich glaub mein sed kann nicht mehr zählen :( > > ich möchte die Zahlenfolge "12345" durch "PLZ" ersetzen und habe folgenden > Test gemacht: > echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g wenn ich mich recht erinnere, kann sed nicht den Multiplikator, er kann hier wirklich nicht zählen :) Bei mir geht echo "test 12345 test" | sed s/[0-9][0-9][0-9][0-9][0-9]/PLZ/g Wolfgang -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
sed problem
hallöchen, ich glaub mein sed kann nicht mehr zählen :( ich möchte die Zahlenfolge "12345" durch "PLZ" ersetzen und habe folgenden Test gemacht: echo "test 12345 test" | sed s/[0-9]\{5\}/PLZ/g und habe folgendes Ergebnis erwartet: "test PLZ test" leider kommt "test 12345 test" - was mach ich da falsch? tschau fisch -- Häufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)