Daten (RS232 Text-Stream) anhand dreier Zeilenenden filtern

Antworten
Nachricht
Autor
Benutzeravatar
atomical
Beiträge: 93
Registriert: 12. Jan 2003 11:32

Daten (RS232 Text-Stream) anhand dreier Zeilenenden filtern

#1 Beitrag von atomical » 16. Nov 2005 21:10

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: Alles auswählen

\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?
mfg, atomical

Jabber: alext@jabber.ccc.de

klopskuchen
prolinux-forum-admin
Beiträge: 1444
Registriert: 26. Jun 2004 21:18
Kontaktdaten:

#2 Beitrag von klopskuchen » 16. Nov 2005 23:11

Code: Alles auswählen

# cat probe.txt
line 1: \n \n \n 
line 2: \n
line 3: \n \n
line 4: \n \n \n

Code: Alles auswählen

# grep -n '\\n \\n \\n' probe.txt
1:line 1: \n \n \n 
4:line 4: \n \n \n 
# :)
MfG, Klopskuchen
When all else fails, read the instructions .

Benutzeravatar
atomical
Beiträge: 93
Registriert: 12. Jan 2003 11:32

#3 Beitrag von atomical » 17. Nov 2005 7:00

Nicht falsch verstehen - in der Datei taucht kein "\" gefolgt von einem n auf, sondern mal in hex

Code: Alles auswählen

0A 20 0A 20 0A
- und danach will ich filtern.

Wenn ich grep zählen lasse, kommt das raus:

Code: Alles auswählen

[ 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.
mfg, atomical

Jabber: alext@jabber.ccc.de

Benutzeravatar
atomical
Beiträge: 93
Registriert: 12. Jan 2003 11:32

#4 Beitrag von atomical » 17. Nov 2005 19:07

So - mittlerweile habe ich 2 Wege - einen aus dem IRC von hp_tux:

Code: Alles auswählen

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
mfg, atomical

Jabber: alext@jabber.ccc.de

Antworten