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

Code: Select all

\n \n \n
(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

Code: Select all

0A 20 0A 20 0A
- 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