Re: sed ; in \n ersetzen
Bertram Scharpf <[EMAIL PROTECTED]> writes: > Hallo Heike, > > Am Dienstag, 18. Mai 2004, 20:40:13 +0200 schrieb Heike C. Zimmerer: >> Bertram Scharpf <[EMAIL PROTECTED]> writes: >> >> > Daß GNU sed 3.02 keine Escape-Sequenzen kann ist erbärmlich >> > und zurecht behoben worden. Dennoch meine ich, es >> > widerspricht der sed-Philosophie, explizit Umbruchzeichen >> > anzugeben. >> >> Ich weiß nicht, woher du deine Kenntnisse der sed-Pholisophie hast. >> SUSv3 und POSIX sind jedenfalls gar nicht deiner Ansicht: >> [...] > > Ich hab's doch nicht bös' gemeint. Die Aufgabe von sed > beginnt halt, wenn die Daten in Zeilen aufgebrochen worden > ist, und sie endet damit, daß Zeilen wieder zusammengefügt > werden. Da paßt es nicht dazu, daß explizit Zeilenumbrüche > eingefügt werden. Ich wollte doch sagen, daß ich nichts > schlechtes dabei finde. Ja, ist ok. Ich sehe die Geschichte von sed halt etwas anders, und das Wort "erbärmlich" kam etwas heftig an. Aber man kann bei der zugrundeliegenden Philosophie sicher verschiedener Ansicht sein - kein Zweifel. Alles klar, Heike -- 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 ; in \n ersetzen
Hallo Heike, Am Dienstag, 18. Mai 2004, 20:40:13 +0200 schrieb Heike C. Zimmerer: > Bertram Scharpf <[EMAIL PROTECTED]> writes: > > > Daß GNU sed 3.02 keine Escape-Sequenzen kann ist erbärmlich > > und zurecht behoben worden. Dennoch meine ich, es > > widerspricht der sed-Philosophie, explizit Umbruchzeichen > > anzugeben. > > Ich weiß nicht, woher du deine Kenntnisse der sed-Pholisophie hast. > SUSv3 und POSIX sind jedenfalls gar nicht deiner Ansicht: > [...] Ich hab's doch nicht bös' gemeint. Die Aufgabe von sed beginnt halt, wenn die Daten in Zeilen aufgebrochen worden ist, und sie endet damit, daß Zeilen wieder zusammengefügt werden. Da paßt es nicht dazu, daß explizit Zeilenumbrüche eingefügt werden. Ich wollte doch sagen, daß ich nichts schlechtes dabei finde. Meine Kenntnisse der sed-Philosophie beziehe ich aus dem genauen Studium der Funktionsweise des Programms, nicht aus einer Dokumentation, die nach und nach ergänzt worden ist mit diesem oder jenem neuen Feature. Zeilenorientiert heißt für mich zeilenorientiert. Die Lösung, die ich angeboten habe, zeigt, meine ich, gut genug, daß ich sed nicht überheblich gegenüberstehe. Außerdem, wie ich erwähnt habe, hat sed auch seine Funktionalität gegenüber Umbruchzeichen von sich aus ergänzt. Also: Ich bitte, meine Äußerung nicht als Gemaule aufzufassen, sondern als einen konstruktiven Beitrag zum Thema Programmierstil. Nur so habe ich es gemeint, und im übrigen bezeichne ich meine eigenen Programme wesentlich häufiger als erbärmlich als die anderer Open-Source-Projekte. Gruß Bertram -- Bertram Scharpf Stuttgart, Deutschland/Germany http://www.bertram-scharpf.de -- 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 ; in \n ersetzen
Bertram Scharpf <[EMAIL PROTECTED]> writes: > Daß GNU sed 3.02 keine Escape-Sequenzen kann ist erbärmlich > und zurecht behoben worden. Dennoch meine ich, es > widerspricht der sed-Philosophie, explizit Umbruchzeichen > anzugeben. Ich weiß nicht, woher du deine Kenntnisse der sed-Pholisophie hast. SUSv3 und POSIX sind jedenfalls gar nicht deiner Ansicht: [SUSv3:] | The replacement string [...] The meaning of a '\' immediately | followed by any character other than '&' , '\' , a digit, or the | delimiter character used for this command, is unspecified. Deine nicht-erbärmliche Version ist also genau genommen undefiniertes Verhalten. Und weiter: | A line can be split by substituting a into it. The | application shall escape the in the replacement by preceding | it by a backslash. Dort ist also eindeutig das festgeschrieben, was für dich erbärmlich und philosophiewidrig ist. > Von den Erfindern favorisiert wäre sicherlich so > eine Lösung: > > $ echo 'a;b;c;d' | sed ':l;/;/{h;s/;.*//;p;g;s/[^;]*;//;b l;}' > > Ich gebe zu, das ist nicht jedermanns Geschmack. Erm.. Gruß, Heike -- 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 ; in \n ersetzen
"Gebhard Dettmar" <[EMAIL PROTECTED]> writes: > Daniel Golesny scribbled on Tuesday, May 18, 2004 12:51 PM > >> Christoph Bier wrote: >>> Daniel Golesny schrieb am 18.05.2004 11:50 >> das funktionieren, tuts aber nicht. >>> >>> Bei mir schon. >>> Er ersetzt es in '\n' und nicht in den Umbruch. \\n oder bei sed mit " ging auch nicht. Ich weiss nicht weiter. >>> >>> $ sed --version >>> GNU sed Version 4.0.9 [...] >> >> ok, dann bin ich nicht blöd, sondern meine Version alt GNU sed >> version 3.02 >> >> habe halt Woody ... > kapiere ich nicht. Das muss gehen, seit es sed gibt. In sed gibt's > doch sogar Multi-line-commands (N,D,P) > ??? Es geht mit jedem sed, wenn man statt der Zeichenfolge Backslash-n tatsächlich ein Newline-Zeichen schreibt, welches man seinerseits mit einem Backslash quoten muß. Dies ist entweder zu bewerkstelligen, indem man das Newline-Zeichen in einer Variablen speichert: nl=' ' echo 'a;b;c' | sed "s/;/\\$nl/g" Oder man schreibt es wirklich da, wo man es haben will: echo 'a;b;c' | sed 's/;/\ /g' Martin -- ,--.Martin Dickopp, Dresden, Germany ,= ,-_-. =. / ,- ) http://www.zero-based.org/ ((_/)o o(\_)) \ `-' `-'(. .)`-' `-. Debian, a variant of the GNU operating system. \_/
Re: sed ; in \n ersetzen
Hallo, Am Dienstag, 18. Mai 2004, 11:44:04 +0200 schrieb Daniel Golesny: > ich habe eine csv-Datei und möchte alle > Semikolon in einen Umbruch ersetzen. > > Ich dachte `cat in.csv | sed -e 's/;/\n/g' > out.csv` würde > das funktionieren, tuts aber nicht. > Er ersetzt es in '\n' und nicht in den Umbruch. > \\n oder bei sed mit " ging auch nicht. Daß GNU sed 3.02 keine Escape-Sequenzen kann ist erbärmlich und zurecht behoben worden. Dennoch meine ich, es widerspricht der sed-Philosophie, explizit Umbruchzeichen anzugeben. Von den Erfindern favorisiert wäre sicherlich so eine Lösung: $ echo 'a;b;c;d' | sed ':l;/;/{h;s/;.*//;p;g;s/[^;]*;//;b l;}' Ich gebe zu, das ist nicht jedermanns Geschmack. Gruß Bertram -- Bertram Scharpf Stuttgart, Deutschland/Germany http://www.bertram-scharpf.de -- 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 ; in \n ersetzen
Daniel Golesny scribbled on Tuesday, May 18, 2004 12:51 PM > Christoph Bier wrote: >> Daniel Golesny schrieb am 18.05.2004 11:50 > >>> das funktionieren, tuts aber nicht. >> >> Bei mir schon. >> >>> Er ersetzt es in '\n' und nicht in den Umbruch. >>> \\n oder bei sed mit " ging auch nicht. >>> Ich weiss nicht weiter. >> >> $ sed --version >> GNU sed Version 4.0.9 [...] > > ok, dann bin ich nicht blöd, sondern meine Version alt GNU sed > version 3.02 > > habe halt Woody ... kapiere ich nicht. Das muss gehen, seit es sed gibt. In sed gibt's doch sogar Multi-line-commands (N,D,P) ??? > > mit `tr' hats funktioniert. Danke an alle. > > Tschüss > Daniel gruß gebhard
Re: sed ; in \n ersetzen
On 2004.05.18 11:44, Daniel Golesny wrote: Hallo, ich habe eine csv-Datei und möchte alle Semikolon in einen Umbruch ersetzen. Ich dachte `cat in.csv | sed -e 's/;/\n/g' > out.csv` würde das funktionieren, tuts aber nicht. Er ersetzt es in '\n' und nicht in den Umbruch. \\n oder bei sed mit " ging auch nicht. Ich weiss nicht weiter. Also, bei mir klappt das: [EMAIL PROTECTED]:~/$ echo "das ist ein test;hier geht es weiter" > in.csv [EMAIL PROTECTED]:~/$ cat in.csv | sed 's/;/\n/g' > out.csv [EMAIL PROTECTED]:~/$ cat out.csv das ist ein test hier geht es weiter Syntax sollte also richtig sein. Vielleicht koenntest Du ja nochmal versuchen, die single(') durch double (") quotes zu ersetzen; zumindest hier macht das aber auch keinen Unterschied... Schoenen Gruss, Andreas -- 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 ; in \n ersetzen
Christoph Bier wrote: Daniel Golesny schrieb am 18.05.2004 11:50 das funktionieren, tuts aber nicht. Bei mir schon. Er ersetzt es in '\n' und nicht in den Umbruch. \\n oder bei sed mit " ging auch nicht. Ich weiss nicht weiter. $ sed --version GNU sed Version 4.0.9 [...] ok, dann bin ich nicht blöd, sondern meine Version alt GNU sed version 3.02 habe halt Woody ... mit `tr' hats funktioniert. Danke an alle. Tschüss Daniel -- 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 ; in \n ersetzen
Hallo Daniel. On Tue, May 18, 2004 at 11:44:04AM +0200, Daniel Golesny wrote: > ich habe eine csv-Datei und möchte alle > Semikolon in einen Umbruch ersetzen. Wenn es nicht 'sed' sein muss, dann kannst Du 'tr' verwenden: tr ";" "\n" < in.csv > out.csv 'tr' ist im Paket textutils drin. Tschuess, Sebastian -- 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 ; in \n ersetzen
Daniel Golesny schrieb: > ich habe eine csv-Datei und möchte alle > Semikolon in einen Umbruch ersetzen. tr ';' '\n' < in.csv > out.csv Ciao Walter -- 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 ; in \n ersetzen
On Tue, May 18, 2004 at 11:44:04AM +0200, Daniel Golesny wrote: > ich habe eine csv-Datei und möchte alle > Semikolon in einen Umbruch ersetzen. > > Ich dachte `cat in.csv | sed -e 's/;/\n/g' > out.csv` würde Useless use of cat... Es funktioniert u.a.: perl -ne 'chomp; foreach(split /;/) { print "$_\n" };' out.csv Das Problem ist, dass man beim sed den Zeilenumbruch als Zeichen nicht gescheit handlen kann. Grüße, Torsten -- 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 ; in \n ersetzen
* Daniel Golesny ([EMAIL PROTECTED]) wrote: > > Ich dachte `cat in.csv | sed -e 's/;/\n/g' > out.csv` würde > das funktionieren, tuts aber nicht. bei mir mit: GNU sed Version 4.0.9 $ echo "hier;halo" | sed -e 's/;/\n/' hier halo $ gruss sascha
Re: sed ; in \n ersetzen
Daniel Golesny schrieb: > Hallo, > > ich habe eine csv-Datei und möchte alle > Semikolon in einen Umbruch ersetzen. > > Ich dachte `cat in.csv | sed -e 's/;/\n/g' > out.csv` würde > das funktionieren, tuts aber nicht. > Er ersetzt es in '\n' und nicht in den Umbruch. > \\n oder bei sed mit " ging auch nicht. > Ich weiss nicht weiter. > > Kann mir das jemand helfen? sed keine Ahnung aber perl cat in.csv | perl -ne 'tr/;/\n/; print' > out.csv -- /// HTH (..) - stefan oo0-\/-0oo--- http://www.sbsbavaria.de/ -- 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 ; in \n ersetzen
Daniel Golesny schrieb am 18.05.2004 11:50 > Hallo, > > ich habe eine csv-Datei und möchte alle > Semikolon in einen Umbruch ersetzen. > > Ich dachte `cat in.csv | sed -e 's/;/\n/g' > out.csv` würde cat ist überflüssig. $ sed 's/;/\n/g' in.csv > csv.out tut bei mir das, was Du willst. in.csv hat bei mir den Inhalt: eins;zwei;drei;vier;fuenf > das funktionieren, tuts aber nicht. Bei mir schon. > Er ersetzt es in '\n' und nicht in den Umbruch. > \\n oder bei sed mit " ging auch nicht. > Ich weiss nicht weiter. $ sed --version GNU sed Version 4.0.9 [...] $ bash --version GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu) [...] HTH! Viele Grüße, Christoph -- 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)