mikrocontroller.net

Forum: Offtopic Reguläre Ausdrücke


Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Hat mal jemand einen Tipp für mich, wie ich mit sed "nicht druckbare 
Zeichen" aus meiner Datei verbannen kann? Ich bastele jetzt seit stunden 
an einer RE, aber irgendwie habe ich da ein Brett vor'm Kopf!

Eine Zeile sähe so aus:
 BOARD test (SERNO: 0000000001) FAILED

...und sollte danach so aussehen:
BOARD test (SERNO: 0000000001) FAILED

Danke!

Autor: Euro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da musst Du nur den Verschiebzyklus ändern und den Parser neu starten.

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Äh, hu?

Naja, ich möchte einfach nur alle nicht druckbaren Zeichen durch 
"nichts" ersetzen. Das wird doch wohl auch einfacher gehen. Btw. gibts 
auch noch eine zweite Zeile, da wäre das ganze nicht so einfach:

Ist:
16-JUN-07  08:57:39 BOARD test (SERNO: 0000000001) PASSED

Soll:
16-JUN-07  08:57:39 BOARD test (SERNO: 0000000001) PASSED

  

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pseudocode ohne REGEXP
char[] daten="16-JUN-07  08:57:39 BOARD test (SERNO: 0000000001) PASSED";

String neuedaten="";

for (int i=0;i<daten.length;i++) {
 if(char[i] > 31) & (char[i] <129) {
  neuedaten=neuedaten + char[i];
 }
}

Autor: Matt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht sed, aber fast:

A tr script to remove all non-printing characters from a file is below. 
Non-printing characters may be invisible, but cause problems with 
printing or sending the file via electronic mail. You run it from Unix 
command prompt, everything on one line:
> tr -d '\001'-'\011''\013''\014''\016'-'\037''\200'-'\377'
   < filein > fileout

von 
http://seismo.berkeley.edu/~rallen/resources/UNIXc...

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sin für dich "nicht druckbare Zeichen"?

Die Sonderzeichen in deinem Beispiel sind ja durchaus noch lesbar.

Ein RE, der alle Zeichen außer den druckbaren ASCII-Zeichen (vom
Leerzeichen bis zur Tilde), den Umlauten und dem Scharf-S akzeptiert,
ist

  [^ -~äöüÄÖÜß]

Der vi-Befehl, um all diese ungewollten Zeichen zu löschen, wäre
demnach

  :s/[^ -~äöüÄÖÜß]//g

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, ich habe wohl deine Frage nicht aufmerksam gelesen, du fragtest
nach sed.

Ist aber ganz ähnlich:

sed -e 's/[^ -~äöüÄÖÜß]//g' eingabedatei

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke yalu, das war genau das, was ich gesucht habe.
Wie gesagt - ich hatte nur ein Brett vorm Kopf. Ich starte den sed in 
Windows und habe einfach nur missachtet, dass man dort double-quotes 
statt single-quotes (" statt ') verwenden sollte! Auf die RE war ich 
auch schon gekommen, aber sed hat sich da geweigert - es kam nur 
Schrott. Jetzt hab' ich das grad nochmal gelesen und getestet und schon 
geht's. Mein Aufruf aus der Windows-Commandshell ist jetzt:
[21:20:42,53] $ cat ./test/stats/* | sed "s/[^ -~äöüÄÖÜß]//g"

Vielen Dank auch allen anderen, die sich mit meinem 'Problem' 
beschäftigt haben ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.