Page 1 of 1
Daten (RS232 Text-Stream) anhand dreier Zeilenenden filtern
Posted: 16. Nov 2005 21:10
by atomical
Hallo
Ein Bash-Problem:
Ich schreibe Daten von der RS232 Schnittstelle mit - auf das sendende Gerät habe ich keinen Einfluss. Leider wird kein explizites Zeichen gesendet, um die Datensätze voneinander zu trennen, sondern eine Zeichenfolge
(LF - SPACE - LF - SPACE - LF) - wobei \n entsprechend für LF steht. Ich müsste also mindestens auf zwei Leerzeichen gefolgt von einem LF filtern können - und mit grep krieg ich das nicht hin.
Any Hints?
Posted: 16. Nov 2005 23:11
by klopskuchen
Code: Select all
# cat probe.txt
line 1: \n \n \n
line 2: \n
line 3: \n \n
line 4: \n \n \n
Code: Select all
# grep -n '\\n \\n \\n' probe.txt
1:line 1: \n \n \n
4:line 4: \n \n \n
# :)
MfG, Klopskuchen
Posted: 17. Nov 2005 7:00
by atomical
Nicht falsch verstehen - in der Datei taucht kein "\" gefolgt von einem n auf, sondern mal in hex
- und danach will ich filtern.
Wenn ich grep zählen lasse, kommt das raus:
Code: Select all
[ alex@phoenix] ~/work/fuba (75G free)% grep -c -n ' ' beispiel.txt
16
[ alex@phoenix] ~/work/fuba (75G free)% grep -c -n '\n' beispiel.txt
2
[ alex@phoenix] ~/work/fuba (75G free)% grep -c -n '\n ' beispiel.txt
1
[ alex@phoenix] ~/work/fuba (75G free)% grep -c -n ' \n' beispiel.txt
0
[ alex@phoenix] ~/work/fuba (75G free)% grep -c -n '\n \n' beispiel.txt
0
Offenbar werden einzig die Leerzeichen richtig gezählt ...
http://www.htw-dresden.de/~s50369/beispiel.txt - die betreffende Stelle liegt am Ende der Datei - zwischen der Reihe "=" und dem "abc" - nach den "=" kann ich nicht filtern, das wär nicht eindeutig.
Posted: 17. Nov 2005 19:07
by atomical
So - mittlerweile habe ich 2 Wege - einen aus dem IRC von hp_tux:
Code: Select all
cat beispiel.txt | tr '\n' 'ö'|sed 's#ö ö ö#Ö#'|tr ö '\n'
trickreich - erst alle LF gegen ö ersetzen, dann die Kombination "ö ö ö" gegen Ö und alle übrigen ö's wieder gegen \n - setzt voraus, das ich zwei Zeichen habe (hier ö und Ö), die nicht im Stream vorkommen.
Die zweite ist ein Perl-Script
http://www.mrunix.de/forums/showthread.php?p=189655