Wie entferne ich nachfolgende Leerzeichen am Ende der Zeile in bestimmten Dateien (mehr als eine)?

9

Ich habe es so satt, nutzlose Leerzeichen in Quelldateien zu haben, dass ich vim sogar so konfiguriert habe, dass sie angezeigt werden.

Das Problem ist, dass ich sehr oft (wenn nicht immer) mit nutzlosen Räumen mit meinen Entwicklern umgehen muss.

Ich möchte nur Quelldateien scannen (mit einem regulären Ausdruck) und Leerzeichen aus allen angegebenen Dateien entfernen.

Ich habe im Internet gesucht ("bash remove whitespace" usw.), aber nichts Nützliches gefunden.

Olivier Pons
quelle
2
Welches Leerzeichen entfernen? Ohne ein Beispiel dafür, was Sie entfernen möchten, sehe ich nicht, wie Ihnen jemand helfen könnte. (Ich vermute, es tr -d ' ' < file.fooist nicht genau das, wonach Sie suchen.)
Mat
Wie können Sie programmgesteuert den Unterschied zwischen nutzlosem und nützlichem Leerzeichen erkennen? Übrigens: Sie könnten ein for-Loop und ein MV sowie ein Sed- und Collapse-Leerzeichen verwenden.
BSD
Sie können auch nachgestellte Leerzeichen entfernen, wenn Sie Ihre Dateien in vim speichern (was Ihnen die Mühe erspart, diesen Befehl erneut auszuführen,
Lucas

Antworten:

8

Wenn mit nutzlosem Leerzeichen am Ende der Zeile ein nachfolgendes Leerzeichen gemeint ist, funktioniert dies auf GNU-Systemen:

find -name '*.c' -print0 | xargs -r0 sed -e 's/[[:blank:]]\+$//' -i

(durch *.cwas auch immer Ihre Quelldateien übereinstimmen ersetzen )

Dennis Kaarsemaker
quelle
Ich habe den Titel geändert, vielen Dank für Ihre Antwort. Jemand hat abgewählt, weil er es vielleicht so einfach fand, dass niemand eine solche Frage stellen sollte ;^). Danke nochmal.
Olivier Pons
1

Dies ist ein wiederkehrendes Problem!

perl -i -pe 's/\s+\n/\n/'  ./*.c

(dies entfernt auch ' \r\n')

Normalerweise verwende ich eine etwas komplexere Version "nrs" (keine redundanten Leerzeichen):

#!/usr/bin/perl -pi
s/\h*(\r\n|\n|\r)/\n/g;                 ## normalize \n (DOS, MAC)
s/^(\xFF\xFE|\xFE\xFF|\xEF\xBB\xBF)//;  ## remove BOM !

installiere es: chmod 755 nrs; cp nrs ~/bin; (oder ähnlich)

und verwenden: nrs ./*.c

Verwenden Sie es nicht in Binärdateien!

JJoao
quelle
0

So vermeiden Sie das Berühren von Dateien, die bereits in Ordnung sind, mit GNU-Tools:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'
Stéphane Chazelas
quelle