Come rimuovere gli spazi bianchi finali alla fine della riga in determinati file (più di uno)?


9

Sono così stufo di spazi inutili nei file sorgente che ho persino configurato VIM per mostrarli.

Il problema è che molto spesso (se non sempre) devo occuparmi di spazi inutili con i miei compagni di sviluppo.

Vorrei solo scansionare i file sorgente (data un'espressione regolare) e rimuovere gli spazi bianchi da tutti i file dati.

Ho cercato nel web ("bash remove whitespace" ecc.) Ma non ho trovato qualcosa di utile.


2
Rimuovere quale spazio bianco? Senza un esempio di ciò che vuoi rimuovere, non vedo come qualcuno possa aiutarti. (Immagino che tr -d ' ' < file.foonon sia esattamente quello che stai cercando.)
Mat,

Come si può distinguere programmaticamente la differenza tra spazi bianchi inutili e spazi bianchi utili? A proposito: è possibile utilizzare uno spazio for loop e mv e sed e collapse;
bsd

Puoi anche rimuovere gli spazi vuoti finali quando salvi i tuoi file in vim (risparmiando la difficoltà di rieseguire questo comando dopo aver modificato qualcosa): unix.stackexchange.com/questions/75430/…
Lucas

Risposte:


8

Se per spazio bianco inutile intendi spazio bianco finale alla fine della linea, questo funzionerà su sistemi GNU:

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

(sostituisci *.ccon qualsiasi file di origine corrisponda)


Ho cambiato il titolo, grazie mille per la tua risposta. Qualcuno ha votato verso il basso perché, forse ha pensato che fosse così semplice, che nessuno avrebbe dovuto porre una simile domanda ;^). Grazie ancora.
Olivier Pons,

1

Questo è un problema ricorrente!

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

(questo rimuove anche ' \r\n')

Di solito uso una versione leggermente più complessa "nrs" (senza spazi ridondanti):

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

installalo: chmod 755 nrs; cp nrs ~/bin; (o simile)

e usa: nrs ./*.c

Non usarlo nei file binari!



0

Per evitare di toccare i file che sono già OK, con gli strumenti GNU:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.