Wie entferne ich eine hartnäckige leere Zeile? :)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
trickykid
Beiträge: 279
Registriert: 15.05.2003 12:37:06

Wie entferne ich eine hartnäckige leere Zeile? :)

Beitrag von trickykid » 26.08.2015 16:25:03

Ich habe hier eine Textdatei in die ich per cronjob alle paar Minuten eine Statusinfo schreiben lasse. Das ist immer eine Zeile. Die Originaldatei habe ich damals via bluefish erstellt und wenn ich mich recht entsinne gab ich der damals eine Leerzeile mit. Bin mir aber nicht sicher.

Ich versuche jetzt diese Datei auszuwerten, die insgesamt ~500.000 Zeilen hat. Die letzte Zeile am Ende der Datei ist eine leere Zeile. Ob das eine echte Leerzeile ist weiss ich nicht.

Jedenfalls ist diese Zeile unlöschbar. Ich kann diese Zeile nur händisch löschen. Mit perl, sed, grep und egrep schaffe ich es nicht:

Code: Alles auswählen

#perl -pi -e 's/^\n//' 
#sed -e :r -e '/^\n*$/{$d;N;};/\n$/br' 
#sed '/^$/d' 
#grep -v '^$' 
#egrep -v "^s*$|^#" 
Wenn ich jetzt ein

Code: Alles auswählen

sort | uniq -c
wird die Leerzeile immer mitgezählt und das sieht blöde aus. Hat irgend jemand eine Idee?


---EDIT--

Wenn ich ein cat Datei mache dann habe ich in der Ausgabe am Ende keine leere Zeile.
Zuletzt geändert von trickykid am 26.08.2015 16:51:42, insgesamt 1-mal geändert.

uname
Beiträge: 12400
Registriert: 03.06.2008 09:33:02

Re: Wie entferne ich eine hartnäckige leere Zeile? :)

Beitrag von uname » 26.08.2015 16:51:35

Ich denke die Zeile ist gar nicht leer.

Code: Alles auswählen

tail -n 1 <file> |hexdump -C
Vielleicht als Lösung:

Code: Alles auswählen

sed -i '$ d' <file>

tobo
Beiträge: 2339
Registriert: 10.12.2008 10:51:41

Re: Wie entferne ich eine hartnäckige leere Zeile? :)

Beitrag von tobo » 26.08.2015 17:06:03

Ich denke auch, dass sich dort noch Leerzeichen und/oder Tabulatoren verstecken:

Code: Alles auswählen

sed '/^\s*$/d'
sed '/^[ \t]*$/d'
sed '/^[[:space:]]*$/d'

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Wie entferne ich eine hartnäckige leere Zeile? :)

Beitrag von r4pt0r » 28.08.2015 14:34:00

Auch gerne (nicht) gesehen: ekelhafte LF+CR kombinationen wenn Dateien von MS-Kisten angefingert wurden...

Meistens ist es einfacher nicht das zu löschen was man nicht haben möchte, sondern nur das zu behalten was man haben will. Also nicht nach dem suchen was raus soll, sondern nur Zeilen die das enthalten was das Script einträgt.
Z.B. nur Zeilen mit druckbaren Zeichen (alphanumerisch + whitespace)

Code: Alles auswählen

/^[:alnum:]*$/
Zeile nur bei match ausgeben oder invertieren (^) und die gematchten Zeilen löschen.

Wenn du den regexp noch exakter auf die ausgaben des Scripts matchen lässt wird auch anderes "rauschen" rausgefiltert und du könntest sogar Kommentare einfügen o.ä.

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Wie entferne ich eine hartnäckige leere Zeile? :)

Beitrag von Meillo » 28.08.2015 15:15:38

r4pt0r hat geschrieben:

Code: Alles auswählen

/^[:alnum:]*$/
Das matcht auf: ``Am Zeilenbeginn (^), null oder beliebig viele (*) Zeichen aus der Menge {`:', `a', `l', `n', `u', `m'} ([:alnum:]), daran anschliessend direkt das Zeilenende ($).''

Ich denke, du hast zumindest ein weiteres Paar eckiger Klammern vergessen.
Use ed once in a while!

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Wie entferne ich eine hartnäckige leere Zeile? :)

Beitrag von r4pt0r » 28.08.2015 18:45:28

Meillo hat geschrieben:
r4pt0r hat geschrieben:

Code: Alles auswählen

/^[:alnum:]*$/
Das matcht auf: ``Am Zeilenbeginn (^), null oder beliebig viele (*) Zeichen aus der Menge {`:', `a', `l', `n', `u', `m'} ([:alnum:]), daran anschliessend direkt das Zeilenende ($).''

Ich denke, du hast zumindest ein weiteres Paar eckiger Klammern vergessen.
stimmt, danke

Code: Alles auswählen

/^[[:alnum:]]+$/
dann wird auch 1 oder mehr zeichen gematcht...

trickykid
Beiträge: 279
Registriert: 15.05.2003 12:37:06

Re: Wie entferne ich eine hartnäckige leere Zeile? :)

Beitrag von trickykid » 02.09.2015 14:09:23

r4pt0r hat geschrieben:
stimmt, danke

Code: Alles auswählen

/^[[:alnum:]]+$/
dann wird auch 1 oder mehr zeichen gematcht...
Ist das php -> http://www.php.net/manual/en/regexp.ref ... lasses.php ?

Antworten