Dateiinhalt automatisiert veraendern (\n entfernen)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von Meillo » 13.02.2018 12:06:57

Hoi.

Ich habe kein tatsaechliches Problem, sondern frage mich mehr, wie man es machen koennte.

Die Sachlage ist folgende: Es gibt eine Datei (file.md5) in welcher ein 32 Zeichen langer MD5-Hash gespeichert ist ... allerdings mit abschliessendem Newline, wie das unter Unix normal ist. In diesem speziellen Fall muss das Newline am Ende aber entfernt werden, damit die Datei nur noch genau 32 Byte gross ist. Gesucht ist eine automatisierbare Loesung.

Mein erster Ansatz war der:

Code: Alles auswählen

tr -d \\n <file.md5 >temp && mv temp file.md5
Der funktioniert auch, man verliert dabei aber die urspruenglichen Permissions, weil eine neue Datei angelegt wird.

Ich wuerde gerne die urspruenglichen Permissions bewahren.

Sich die alten Werte zu merken und am Ende neu zu setzen, waere nur eine Notloesung. Lieber wuerde ich die gleiche Datei ueberschreiben.

Ein Binaer-sed koennte helfen, aber ich will moeglichst mit Standardtools arbeiten.

Ich meine, dass ich in irgendeinem Unix-Buch mal von einer Art `overwrite'-Tool gelesen habe, das allen Input puffert und ihn Ende in die Ausgabedatei schreibt, mit dem Ziel, dieses Problem zu loesen:

Code: Alles auswählen

<file foo | bar | baz >file
Man koennte es dann so machen:

Code: Alles auswählen

<file foo | bar | baz | overwrite file
Das wuerde dann funktionieren, wenn `overwrite' die Datei erst dann trunkiert, wenn es den gesamten Input gelesen hat.

Das ist genau das was ich brauche. Ich muss mal suchen, in welchem Buch das war ...

Jedenfalls frage ich mich, wie man das moeglichst mit POSIX-Mitteln und gleichzeitig einfach umsetzen koennte.

Meine erste Idee war, `sort -o' zu verwenden, weil das genau so funktioniert: Sort muss erst alle Daten lesen, bevor es schreibt und es trunkiert die Ausgabedatei erst wenn es zu schreiben beginnt. Also:

Code: Alles auswählen

tr -d \\n <file.md5 | sort -o file.md5
Sort(1) kann ich deshalb verwenden, weil ich nur genau eine Zeile habe, und damit jede Sortierung identisch ist. Das Problem ist aber, dass sort(1) auf Unix-Textdateien arbeitet und beim Erzeugen der Ausgabe selbstverstaendlich das fehlende abschliessende Newline ergaenzt. Mist. ;-)

Also doch selber ein `overwrite' schreiben, z.B. so:

Code: Alles auswählen

overwrite() { in="`cat`"; printf %s "$in" >"$1"; }
Das geht schon grundsaetzlich, scheitert aber an genau meinem Problemfall, weil die Kommandosubstitution ein etwaiges abschliessendes Newline entfernt, ich es aber beim printf(1) nicht wieder anfuegen darf (was ich eigentlich sollte), weil ich ja gerade das nicht haben will. Ich kann aber nicht unterscheiden, ob der Input am Ende ein Newline hatte oder nicht. Schon wieder Mist ...

Also doch mit awk richtig programmieren?


Hat sonst noch jemand Ideen wie man das auf der Shellebene loesen koennte? Ich wuerde mich ueber eine nette Diskussion freuen.
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von hikaru » 13.02.2018 13:19:48

1. Danke für die interessante Knobelei!
2. Mit "Binär-sed" meinst du GNU-sed?
3. Lösungsvorschlag:

Code: Alles auswählen

tr -d \\n <file.md5 >>file.md5 && sed -i '1d' file.md5
PS: Ob sed -i ein GNUism ist musste ich nachschlagen, vermute nun aber, dass es keiner ist, womit die Lösung formal gültig sein sollte.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von Meillo » 13.02.2018 13:39:26

Meillo hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 12:06:57
Ich meine, dass ich in irgendeinem Unix-Buch mal von einer Art `overwrite'-Tool gelesen habe, das allen Input puffert und ihn Ende in die Ausgabedatei schreibt, mit dem Ziel, dieses Problem zu loesen:

Code: Alles auswählen

<file foo | bar | baz >file
Man koennte es dann so machen:

Code: Alles auswählen

<file foo | bar | baz | overwrite file
Das wuerde dann funktionieren, wenn `overwrite' die Datei erst dann trunkiert, wenn es den gesamten Input gelesen hat.

Das ist genau das was ich brauche. Ich muss mal suchen, in welchem Buch das war ...
Ich habe das Programm gefunden. Es wird in ``The UNIX Programming Enviroment'' vorgestellt: http://scis.uohyd.ac.in/~apcs/itw/UNIXP ... onment.pdf
Seite 154 (PDF-Seite 166)

Der Abschnitt 5.5 im Buch beginnt mit einer Implementierung, die wie oben skizziert funktioniert, also am Ende der Pipeline steht, er endet aber mit einer Implementierung, die wie das time-Builtin funktioniert, also dem Befehl voran gestellt werden muss.

So umfangreich wollte ich das alles aber gar nicht haben ...



... Am Ende war's gut, dass ich in dieses Buch geschaut habe, weil dort steht:
cp is used instead of mv so the permissions and owner of the output file aren't changed if it already exists.
Unfassbar! Jetzt arbeite ich durchaus schon eine Weile mit Unix, aber mir ist dieser kleine Unterschied zwischen cp(1) und mv(1) nie aufgefallen! Damit eruebrigt sich natuerlich mein Thread, denn man loest es einfach so:

Code: Alles auswählen

tr -d \\n <file.md5 >temp && cp temp file.md5 && rm temp
;-)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von Meillo » 13.02.2018 13:49:04

hikaru hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 13:19:48
2. Mit "Binär-sed" meinst du GNU-sed?
Nein, eines, das nicht auf Textdateien sondern auf Binaerdateien arbeitet und damit keine Vorstellung von Zeilen und folglich auch keine Sonderbehandlung von Newlines hat. Also wie man zum Bearbeiten von Binaerdateien auch keinen vi sondern einen Binaereditor nimmt. Keine Ahnung, ob es so ein Binaer-sed gibt. Nur falls es es gibt, waere es hierfuer geeignet.
3. Lösungsvorschlag:

Code: Alles auswählen

tr -d \\n <file.md5 >>file.md5 && sed -i '1d' file.md5
Interessante Idee! Bloss ...
PS: Ob sed -i ein GNUism ist musste ich nachschlagen, vermute nun aber, dass es keiner ist, womit die Lösung formal gültig sein sollte.
`sed -i' gehoert nicht zu POSIX. Wie viele sed-Implementierungen es koennen, weiss ich nicht. Fuer deine Loesung ist `sed -i' leider essenziell.


Auch wenn mir inzwischen die Augen geoeffnet worden sind (cp statt mv), so freue ich mich weiterhin ueber Vorschlaege und Diskussionen hier.
Use ed once in a while!

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von uname » 13.02.2018 13:50:48

Es gibt so viele sed-Beispiele im Internet, die alle scheinbar nicht funktionieren. Mit "sed -i ..." müsste sogar eine direkte Änderung der Datei möglich sein. Vielleicht kann mal eben jemand eine lauffähige Version posten.

https://stackoverflow.com/questions/125 ... -using-sed

Benutzeravatar
TRex
Moderator
Beiträge: 8038
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von TRex » 13.02.2018 13:54:13

Du brauchst eigentlich nur einen Zwischenspeicher für den Dateiinhalt...

Code: Alles auswählen

x=$(<file.md5 tr -d '\n'); echo -n "$x" > file.md5
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von hikaru » 13.02.2018 13:59:40

Meillo hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 13:49:04
`sed -i' gehoert nicht zu POSIX. Wie viele sed-Implementierungen es koennen, weiss ich nicht. Fuer deine Loesung ist `sed -i' leider essenziell.
sed -i habe ich in der Manpage von FreeBSD gefunden. [1] Bisher dachte ich, das wäre POSIX-konform. Da hätte ich wohl vorher mal die ganze Manpage lesen sollen:
STANDARDS
The sed utility is expected to be a superset of the IEEE Std 1003.2
(``POSIX.2'') specification.

The -E, -I, -a and -i options, the prefixing ``+'' in the second member
of an address range, as well as the ``I'' flag to the address regular
expression and substitution command are non-standard FreeBSD extensions
and may not be available on other operating systems.
Wieder was gelernt! :roll:


[1] https://www.freebsd.org/cgi/man.cgi?sed

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von hikaru » 13.02.2018 14:02:38

TRex hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 13:54:13
Du brauchst eigentlich nur einen Zwischenspeicher für den Dateiinhalt...

Code: Alles auswählen

x=$(<file.md5 tr -d '\n'); echo -n "$x" > file.md5
Die Crux dabei ist, dass die Syntax zum Aufbau des Zwischenspeichers von deiner Shell abhängig ist.

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von uname » 13.02.2018 14:06:56

Bei der Bash funktioniert der Aufruf. Danke dafür.

Aber gibt es nicht irgendeinen Befehl, der Zeichen aus eine Datei löscht ohne die Datei vollständig neu zu schreiben?

Nachtrag:

Ich habe eine Lösung gefunden. Ich bin mir aber nicht sicher ob die Datei zwischenzeitlich gespeichert wurde. Laut Debianstrace macht es aber nicht den Eindruck. Vielleicht kann das mal jemand überprüfen.

Code: Alles auswählen

truncate --size=-1 file.md5
Zuletzt geändert von uname am 13.02.2018 14:19:48, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von Meillo » 13.02.2018 14:18:36

Bei OpenBSD ist `sed -i' im Jahr 2015 eingebaut worden:
https://cvsweb.openbsd.org/cgi-bin/cvsw ... web-markup


In Solaris 11.1 (scheinbar von 2010) kann das sed kein `-i':
https://docs.oracle.com/cd/E26502_01/ht ... #scrolltoc
... aber moeglicherweise wird dort automatisch auch gsed installiert. Die Oracle-Website ist zu verworren als dass ich dort noch nach mehr Dokumentation suchen will. Wie die Situation bei Solaris 11.3 aussieht, ist unklar.

Die meisten verbreiteten Systeme sollten also `sed -i' unterstuetzen.


Bei POSIX fehlt es aber und bleibt auch in den informativen Abschnitten unerwaehnt:
http://pubs.opengroup.org/onlinepubs/96 ... s/sed.html
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von hikaru » 13.02.2018 14:23:02

uname hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:06:56
Ich habe eine Lösung gefunden. Ich bin mir aber nicht sicher ob die Datei zwischenzeitlich gespeichert wurde. Laut Debianstrace macht es aber nicht den Eindruck

Code: Alles auswählen

truncate --size=-1 file.md5
Auf jeden Fall eleganter als mein md5-spezifischer Holzhammer:

Code: Alles auswählen

dd if=/dev/zero of=file.md5 bs=32 seek=1

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von Meillo » 13.02.2018 14:24:17

hikaru hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:02:38
TRex hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 13:54:13
Du brauchst eigentlich nur einen Zwischenspeicher für den Dateiinhalt...

Code: Alles auswählen

x=$(<file.md5 tr -d '\n'); echo -n "$x" > file.md5
Die Crux dabei ist, dass die Syntax zum Aufbau des Zwischenspeichers von deiner Shell abhängig ist.
Wieso? Wenn man die csh ausklammert, dann geht es portabel in allen POSIX-kompatiblen (Bourne-)Shells so:

Code: Alles auswählen

x="`<file.md5 tr -d \\n`"; printf %s "$x" >file.md5
Diese Idee hatte ich ja selber schon, bloss war das in dem Gedankengang eines allgemeingueltigen overwrite-Tools. Allgemeingueltig geht es nicht, aber in dem konkreten Fall geht es sehr wohl. Das hab ich im Post oben aber nicht gesehen. ;-)
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von hikaru » 13.02.2018 14:28:45

Meillo hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:24:17
Wieso? Wenn man die csh ausklammert,
Eben. ;)

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von Meillo » 13.02.2018 14:32:53

uname hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:06:56
Ich habe eine Lösung gefunden. Ich bin mir aber nicht sicher ob die Datei zwischenzeitlich gespeichert wurde. Laut Debianstrace macht es aber nicht den Eindruck

Code: Alles auswählen

truncate --size=-1 file.md5
Das ist wirklich eine nette Loesung; sehr straight-forward! Abzuege nur weil truncate(1) nicht Teil von POSIX ist (immerhin aber ist es Teil der GNU Coreutils).

Loesungen ausserhalb von POSIX duerfen ruhig auch gepostet werden. ;-)
hikaru hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:23:02
Auf jeden Fall eleganter als mein md5-spezifischer Holzhammer:

Code: Alles auswählen

dd if=/dev/zero of=file.md5 bs=32 seek=1
... der endlos rennt und eine sehr grosse Zieldatei erzeugt. ;-) Ausserdem darfst du Null-Bytes in C-Strings nicht mit Null-Bytes in Dateien verwechseln. Schau dir die Zieldatei immer mit `ls -l' bzgl. Groesse und Owner/Permissions und mit `od -c' bzgl. Inhalt an.

Diese Idee von mir geht naemlich aus gleichem Grund nicht:

Code: Alles auswählen

tr -d \\n <file.md5 | sort -z -o file.md5
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von Meillo » 13.02.2018 14:33:44

hikaru hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:28:45
Meillo hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:24:17
Wieso? Wenn man die csh ausklammert,
Eben. ;)
Na, wenn man die csh ins Spiel wirft, dann kann einem nur noch Perl helfen. ;-)
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von hikaru » 13.02.2018 15:15:08

Meillo hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:32:53
hikaru hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:23:02
Auf jeden Fall eleganter als mein md5-spezifischer Holzhammer:

Code: Alles auswählen

dd if=/dev/zero of=file.md5 bs=32 seek=1
... der endlos rennt und eine sehr grosse Zieldatei erzeugt. ;-)
Argh!
Sowas passiert, wenn man Sachen auf einem Rechner testet und dann zum Posten auf einem anderen abtippt. Ich meinte /dev/null, aber weil mir die Terminierung früher in anderen Situationen oft auf die Füße fiel, ist /dev/zero bei mir schon "muscle memory"*.
Nun ja, nehmen wir's auf in die Liste der Beispiele, warum man nicht ungeprüft copy&paste aus dem Netz machen sollte. ;)

Die korrigierte Variante mit /dev/null ist binär identisch (md5sum) zu unames truncate-Variante und meiner tr-sed-Kette.


*) Gibt's das auch auf Deutsch?

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von breakthewall » 13.02.2018 15:18:30

Laut Manpage hat sed doch einen Binärmodus:
'-b'
'--binary'
This option is available on every platform, but is only effective where the operating system makes a distinction between text files and binary files. When such a distinction is made--as is the case for MS-DOS, Windows, Cygwin--text files are composed of lines separated by a carriage return _and_ a line feed character, and 'sed' does not see the ending CR. When this option is specified, 'sed' will open input files in binary mode, thus not requesting this special processing and considering lines to end at a line feed.

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von uname » 13.02.2018 16:26:07

Mein SuSE kennt die Option -b von sed nicht.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von breakthewall » 13.02.2018 16:46:32

uname hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 16:26:07
Mein SuSE kennt die Option -b von sed nicht.
Eine Linux-Distribution die GNU/sed nicht nutzt? Sehr ungewöhnlich.

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von uname » 13.02.2018 16:52:47

https://www.unix.com/man-page/suse/1/sed/

Sollte vielleicht mal langsam auf Debian GNU/Linux wechseln.

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von hikaru » 13.02.2018 17:08:55

breakthewall hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 15:18:30
Laut Manpage hat sed doch einen Binärmodus:
Fragt sich, welches sed du da vor dir hast. GNU sed kennt auch in Version 4.4.2 (Sid) kein --binary.

owl102

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von owl102 » 13.02.2018 17:15:01

Meillo hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 14:24:17
Wieso? Wenn man die csh ausklammert, dann geht es portabel in allen POSIX-kompatiblen (Bourne-)Shells so:

Code: Alles auswählen

x="`<file.md5 tr -d \\n`"; printf %s "$x" >file.md5
Alle POSIX-kompatiblen Shells sollten aber $(..) können. Somit sollte folgendes POSIX-kompatibel sein:

Code: Alles auswählen

x="$(<file.md5 tr -d \\n)"; printf %s "$x" >file.md5
Siehe auch: http://mywiki.wooledge.org/BashFAQ/082

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von breakthewall » 13.02.2018 17:24:09

hikaru hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 17:08:55
Fragt sich, welches sed du da vor dir hast. GNU sed kennt auch in Version 4.4.2 (Sid) kein --binary.
Und was ist dann das: https://www.gnu.org/software/sed/manual/sed.txt ?

Dort steht das so drin. ^^

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von ThorstenS » 13.02.2018 17:53:22

Das sed in debian kennt seit Version 4.1 -i/--in-place. Das kam mit dem Wechsel von woody (sed 3.02) auf sarge (sed 4.1) und war ein echter Segen.

Ich habe davor auch Dateien mit awk eingelesen und im END Bereich dann wieder in die ursprüngliche Datei gepiped.
Das waren aber alles Krücken, sed -i rockt! :lol:

Edit:
Ein interessanter Bookmark zu der Thematik: http://richmegginson.livejournal.com/18726.html

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Dateiinhalt automatisiert veraendern (\n entfernen)

Beitrag von Meillo » 13.02.2018 18:25:57

breakthewall hat geschrieben: ↑ zum Beitrag ↑
13.02.2018 15:18:30
Laut Manpage hat sed doch einen Binärmodus:
'-b'
'--binary'
This option is available on every platform, but is only effective where the operating system makes a distinction between text files and binary files. When such a distinction is made--as is the case for MS-DOS, Windows, Cygwin--text files are composed of lines separated by a carriage return _and_ a line feed character, and 'sed' does not see the ending CR. When this option is specified, 'sed' will open input files in binary mode, thus not requesting this special processing and considering lines to end at a line feed.
Das ist inhaltlich etwas anderes als das was ich meine. Ist ja auch beschrieben, was genau dieses -b macht. Auf Unix ist es ein NOP. Es sorgt lediglich dafuer, dass bei fopen(3) beim zweiten Parameter ein `b' ergaenzt wird. Siehe Manpage von fopen(3) fuer Details. Damit kann man immer noch nicht s/\n// machen, weil man in sed(1) das Newline am Zeilenende nicht matchen kann. In einem Binaer-sed (so wie ich es beschrieben habe) koennte man das. Das ist wie im vi, da kann man auch nicht das Newline am Zeilenende einfach wegeditieren wie man alle anderen Zeichen der Zeile editieren kann. Es braucht dafuer den speziellen Befehl j. Das liegt daran, dass vi eben ein Text-Editor ist. So ist sed auch ein Programm zur Verarbeitung von Text-Files.
Use ed once in a while!

Antworten