Hallo ML, zu Übungszwecken wollte ich mal mittels sed ein Unix-formatiertes textfile in ein DOS-formatiertes Textfile umwandeln, sprich aus jedem "\n" ein "\n\r" machen. Alle meine Versuche blieben erfolglos: sed 's/\n/\n\r/g' console_2.txt sed 's/\d10/\d10\d13/g' console_2.txt sed 's/\x0a/\x0d\x0a/g' console_2.txt sed 's/\n/\r\n/g' console_2.txt Alles nicht gefruchtet. Im Internet bin ich dann auf folgendes gestoßen: sed 's/$/\r/g' console_2.txt Und das hat dann funktioniert. Ich verstehe leider weder, warum meine Versuche nicht funktionierten, noch warum das u.g. funktioniert. Ok, '$' steht für das Zeilenende, aber müsste dann nicht statt '\r' '\n\r' da stehen ? Könnt Ihr mir auf die Sprünge helfen ? Bernd -- Bernd Lentes Systemadministration Institut für Entwicklungsgenetik HelmholtzZentrum münchen bernd.lentes@helmholtz-muenchen.de phone: +49 89 3187 1241 fax: +49 89 3187 3826 http://www.helmholtz-muenchen.de/idg Aufsichtsratsvorsitzende: MinDir'in Bärbel Brumme-Bothe Geschäftsführer: Prof. Dr. Günther Wess und Dr. Nikolaus Blum Registergericht: Amtsgericht München HRB 6466 Zeit ist keine Schnellstrasse zwischen Wiege und Grab, sondern Platz zum Parken in der Sonne -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am 17. August 2010 11:35 schrieb Lentes, Bernd
Könnt Ihr mir auf die Sprünge helfen ? Hallo Bernd,
meiner Meinung nach sind deine Gedankengänge viel zu komplex sed 's|\r||g' should do the trick.. -- MfG Kai Heide Es reitet der Heidereiter durch die Heide weiter -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Tuesday, August 17, 2010 11:35:51 Lentes, Bernd wrote:
zu Übungszwecken wollte ich mal mittels sed ein Unix-formatiertes textfile in ein DOS-formatiertes Textfile umwandeln, sprich aus jedem "\n" ein "\n\r" machen. Alle meine Versuche blieben erfolglos:
sed 's/\n/\n\r/g' console_2.txt
sed 's/\d10/\d10\d13/g' console_2.txt
sed 's/\x0a/\x0d\x0a/g' console_2.txt
sed 's/\n/\r\n/g' console_2.txt
Alles nicht gefruchtet.
Im Internet bin ich dann auf folgendes gestoßen:
sed 's/$/\r/g' console_2.txt
Und das hat dann funktioniert. Ich verstehe leider weder, warum meine Versuche nicht funktionierten, noch warum das u.g. funktioniert. Ok, '$' steht für das Zeilenende, aber müsste dann nicht statt '\r' '\n\r' da stehen ?
Könnt Ihr mir auf die Sprünge helfen ?
Ich glaube Dein Missverständnis rührt daher, dass Du annimmst "\n\r" sei der Zeilentrenner in DOS. Es ist aber "\r\n". Um Deine Kodierung zu erreichen, müsstest Du schreiben: sed 's/^/\r/' console_2.txt Das "g"-Flag ist in beiden Fällen überflüssig, da es pro Zeile nur ein Ende und einen Anfang geben kann. Sed arbeitet zeilenweise. Zur Frage, warum sed kein "\n" in der Zeile findet, sei hier aus der Doku zitiert: `sed' operates by performing the following cycle on each lines of input: first, `sed' reads one line from the input stream, removes any trailing newline, and places it in the pattern space. Then commands are executed; each command can have an address associated to it: addresses are a kind of condition code, and a command is only executed if the condition is verified before the command is to be executed. Bevor er irgendwelche Kommandos auf der Zeile ausführt, löscht er alle newlines. Torsten Förtsch -- Need professional modperl support? Hire me! (http://foertsch.name) Like fantasy? http://kabatinte.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Torsten Förtsch schrieb:
zu Übungszwecken wollte ich mal mittels sed ein Unix-formatiertes textfile in ein DOS-formatiertes Textfile umwandeln, sprich aus jedem "\n" ein "\n\r" machen. Alle meine Versuche blieben erfolglos:
sed 's/\n/\n\r/g' console_2.txt
sed 's/\d10/\d10\d13/g' console_2.txt
sed 's/\x0a/\x0d\x0a/g' console_2.txt
sed 's/\n/\r\n/g' console_2.txt
Alles nicht gefruchtet.
Im Internet bin ich dann auf folgendes gestoßen:
sed 's/$/\r/g' console_2.txt
Und das hat dann funktioniert. Ich verstehe leider weder, warum meine Versuche nicht funktionierten, noch warum das u.g. funktioniert. Ok, '$' steht für das Zeilenende, aber müsste dann nicht statt '\r' '\n\r' da stehen ?
Könnt Ihr mir auf die Sprünge helfen ?
Ich glaube Dein Missverständnis rührt daher, dass Du annimmst "\n\r" sei der Zeilentrenner in DOS. Es ist aber "\r\n".
stimmt.
Zur Frage, warum sed kein "\n" in der Zeile findet, sei hier aus der Doku zitiert:
`sed' operates by performing the following cycle on each lines of input: first, `sed' reads one line from the input stream, removes any trailing newline, and places it in the pattern space. Then commands are executed; each command can have an address associated to it: addresses are a kind of condition code, and a command is only executed if the condition is verified before the command is to be executed.
Ok. Wenn ich das also richtig verstehe, sieht das wie folgt aus: Zeile wird gelesen - \n abschneiden - Rest der Zeile in pattern space kopieren - commands ausführen - pattern space ausgeben, dabei \n wieder anhängen. Für meinen konkreten Fall (sed 's/$/\r/g' console_2.txt) also: Zeile lesen - \n abschneiden - Rest der Zeile in pattern space kopieren - commands ausführen ( da vorher \n abgeschnitten wurde, kann ich mich natürlich blöd nach \n suchen. Da $ aber immer noch gilt, wird so \r an's Ende der Zeile angehangen - pattern space ausgeben, dabei \n wieder an Zeile anhängen (somit steht \r\n am Zeilenende). Stimmt's ? Danke an Torsten. Bernd-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Lentes,! On Di, 17 Aug 2010, Lentes, Bernd wrote:
Für meinen konkreten Fall (sed 's/$/\r/g' console_2.txt) also: Zeile lesen - \n abschneiden - Rest der Zeile in pattern space kopieren - commands ausführen ( da vorher \n abgeschnitten wurde, kann ich mich natürlich blöd nach \n suchen. Da $ aber immer noch gilt, wird so \r an's Ende der Zeile angehangen - pattern space ausgeben, dabei \n wieder an Zeile anhängen (somit steht \r\n am Zeilenende).
Stimmt's ? Danke an Torsten.
Ja. Du kannst aber nach \n suchen, wenn du mehrere Zeilen einliest. regards, Christian -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Christian Brabandt schrieb:
On Di, 17 Aug 2010, Lentes, Bernd wrote:
Für meinen konkreten Fall (sed 's/$/\r/g' console_2.txt) also: Zeile lesen - \n abschneiden - Rest der Zeile in pattern space kopieren - commands ausführen ( da vorher \n abgeschnitten wurde, kann ich mich natürlich blöd nach \n suchen. Da $ aber immer noch gilt, wird so \r an's Ende der Zeile angehangen - pattern space ausgeben, dabei \n wieder an Zeile anhängen (somit steht \r\n am Zeilenende).
Stimmt's ? Danke an Torsten.
Ja. Du kannst aber nach \n suchen, wenn du mehrere Zeilen einliest.
Hallo Christian, wie lese ich mehrere Zeilen ein ? Bernd-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Lentes,! On Mi, 18 Aug 2010, Lentes, Bernd wrote:
wie lese ich mehrere Zeilen ein ?
mit 'N' und bevor jetzt die Frage kommt, wie man eine ganze Datei komplett einliest und dann alle Zeilenumbrüche ersetzt, verweise ich mal auf folgende Beiträge: http://blog.256bit.org/archives/145-Sed-Vodoo.html und http://www.freiesmagazin.de/ftp/2010/freiesMagazin-2010-03.pdf Mit freundlichen Grüßen Christian -- Wir sind nicht nur verantwortlich für das, was wir tun, sondern auch für das, was wir nicht tun. -- Jean-Baptiste Molière -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (4)
-
Christian Brabandt
-
Kai Heide
-
Lentes, Bernd
-
Torsten Förtsch