Jak usunąć końcowe białe znaki na końcu wiersza w danych plikach (więcej niż jeden)?

9

Mam dość niepotrzebnych spacji w plikach źródłowych, które nawet skonfigurowałem vim, aby je wyświetlać.

Problem polega na tym, że bardzo często (jeśli nie zawsze) mam do czynienia z bezużytecznymi przestrzeniami z moimi programistami.

Chciałbym tylko przeskanować pliki źródłowe (biorąc pod uwagę wyrażenie regularne) i usunąć białe znaki ze wszystkich podanych plików.

Szukałem w Internecie („bash remove whiteSpace” itp.), Ale nie znalazłem czegoś przydatnego.

Olivier Pons
źródło
2
Usuń jakie białe znaki? Bez przykładu tego, co chcesz usunąć, nie widzę, jak ktoś mógłby ci pomóc. (Zgaduję, że tr -d ' ' < file.foonie jest dokładnie tym, czego szukasz).
Mat.
Jak możesz programowo odróżnić bezużyteczne białe znaki od przydatnych białych znaków? BTW: Możesz użyć pętli for i mv oraz sed i zwinąć białe znaki;
bsd
Możesz także usunąć końcowe białe znaki podczas zapisywania plików w vimie (co oszczędza kłopotów z ponownym
Lucas

Odpowiedzi:

8

Jeśli przez bezużyteczne białe znaki masz na myśli końcowe białe znaki na końcu linii, będzie to działać w systemach GNU:

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

(zamień na *.cdowolne pliki źródłowe)

Dennis Kaarsemaker
źródło
Zmieniłem tytuł, dziękuję bardzo za odpowiedź. Ktoś zagłosował, bo może myślał, że to takie proste, że nikt nie powinien zadawać takich pytań ;^). Jeszcze raz dziękuję.
Olivier Pons,
1

To jest powtarzający się problem!

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

(to także usuwa „ \r\n”)

Zwykle używam nieco bardziej złożonej wersji „nrs” (bez zbędnych spacji):

#!/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 !

zainstaluj: chmod 755 nrs; cp nrs ~/bin; (lub podobny)

I użyć: nrs ./*.c

Nie używaj go w plikach binarnych!

JJoao
źródło
0

Aby uniknąć dotykania plików, które są już OK, za pomocą narzędzi GNU:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'
Stéphane Chazelas
źródło