kB schrieb:
Das funktioniert bei mir auch wie beschrieben, hier sehe ich keine Erfordernis für eine Anpassung. Allerdings schlage ich als gesamten Befehl vor:
.... sed 's/[ \x0]*$//g ; /^[ ]*$/ d'
kB schrieb:
Die richtige Bildschirmbreite kann man übrigens aus den Terminal-Einstellungen für tty1
lesen und dann in den fold
-Befehl einsetzen und das Programm für sed geht einfacher:
$ ... sed 's/ *$// ; /^ *$/ d'
$...
Die Methode hat ein strukturelles Problem: Bei Lesen aus dem Bildschirmspeicher /dev/vcs1 werden die gefundenen Glyphen in Zeichen übersetzt. Dabei werden die Zeichen offenbar nach ISO 8859 codiert (1 Byte pro Zeichen, somit weniger als 256 verschiedene Zeichen möglich) und nicht nach UTF-8 (abhängig vom Zeichen mehrere Byte pro Zeichen, aber alle Unicode-Zeichen möglich), auch wenn tty1
auf Unicode eingestellt ist.
sed 's/[ \x0]*$//g ; /^[ ]*$/ d' # hier sind 5 mal / enthalten
sed 's/ *$// ; /^ *$/ d' # hier auch
Die Unterschiede sind die:
Da ich im Wiki sed
nicht alle hier eingesetzten Zeichen und wo genau Leerzeichen wichtig sind finde, schreibe ich das hier mal auf. ☺
Die Methode hat ein strukturelles Problem: Bei Lesen aus dem Bildschirmspeicher /dev/vcs1 werden die gefundenen Glyphen in Zeichen übersetzt. Dabei werden die Zeichen offenbar nach ISO 8859 codiert (1 Byte pro Zeichen, somit weniger als 256 verschiedene Zeichen möglich) und nicht nach UTF-8 (abhängig vom Zeichen mehrere Byte pro Zeichen, aber alle Unicode-Zeichen möglich), auch wenn tty1 auf Unicode eingestellt ist.
Was hier mit dem Befehl echo
auf der tty1
erzeugte Text zeigt:
mate@mate-HP-ProDesk:/tmp$ echo f�r alle die �ber Umlaute sich wundern, ein lautes � und dann ein �
f�r alle die �ber Umlaute sich wurdern, ein lates � und dann ein �
mate@mate-HP-ProDesk:/tmp$
der eingegebene Textteil des Befehl echo
: "für alle die über Umlaute sich wundern, ein lautes Ä und dann ein ö"
Ich vermute es werden die ersten 128 Positionen des ISO 8859 verwendet, die den Zeichen des 7-Bit-Satzes US-ASCII entsprechen. Denn der ISO 8859 kann Umlaute darstellen. Auch wenn der UTF-8 benutzt würde und auch hier nur die ersten 128 Positionen (Hex 00–7F) benutzt werden, kommt es zum gleichen Ergebnis. So mein Weltbild.
Könnte es vllt auch an dem sed
liegen, der nur die 128 Positionen liest bzw überträgt.
Frage: gibt es einen Befehl, womit der Bildschirmspeicher /dev/vcs1 hexmäßig ausgelesen wird, denn sonst wären ja Umlaute überhaupt nicht möglich. So könnte man dann sehen, dass es der Befehl sed
macht.
Nachtrag:
Es ist das fehlende Leerzeichen, was den Fehler erzeugt:
sudo fold -w 240 /dev/vcs1 | sed 's/[ \x0]*$//g ; /^ [ ]*$/ d' > /tmp/VCS1