Forum: Offtopic Reguläre Ausdrücke


von Patrick D. (oldbug) Benutzerseite


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:
1
 BOARD test (SERNO: 0000000001) FAILED

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

Danke!

von Euro (Gast)


Lesenswert?

Da musst Du nur den Verschiebzyklus ändern und den Parser neu starten.

von Patrick D. (oldbug) Benutzerseite


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:
1
16-JUN-07  08:57:39 BOARD test (SERNO: 0000000001) PASSED

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

  

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Pseudocode ohne REGEXP
1
char[] daten="16-JUN-07  08:57:39 BOARD test (SERNO: 0000000001) PASSED";
2
3
String neuedaten="";
4
5
for (int i=0;i<daten.length;i++) {
6
 if(char[i] > 31) & (char[i] <129) {
7
  neuedaten=neuedaten + char[i];
8
 }
9
}

von Matt (Gast)


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/UNIXcmds/sed_tr_cut_od.html

von yalu (Gast)


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

von yalu (Gast)


Lesenswert?

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

Ist aber ganz ähnlich:

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

von Patrick D. (oldbug) Benutzerseite


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:
1
[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? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.