it-swarm-eu.dev

vieni rimuovere gli spazi bianchi da ogni riga in un file?

Ho un file che assomiglia a questo:

for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
  for (i = 0; i < 100; i++)
       for (i = 0; i < 100; i++)
     for (i = 0; i < 100; i++)
           for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)

Voglio che assomigli a questo (rimuovere i rientri):

for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)

Come può essere fatto (usando sed forse?)

55
Lazer
sed "s/^[ \t]*//" -i youfile

Attenzione: questo sovrascriverà il file originale.

91
shuvalov

Per questo problema specifico, qualcosa di simile funzionerebbe:

$ sed 's/^ *//g' < input.txt > output.txt

Dice di sostituire tutti gli spazi all'inizio di una linea senza niente. Se vuoi anche rimuovere le schede, cambialo in questo modo:

$ sed 's/^[ \t]+//g' < input.txt > output.txt

La "s" prima della/significa "sostituto". Le/i sono i delimitatori per i pattern. I dati tra i primi due/sono il modello da abbinare ei dati tra il secondo e il terzo/sono i dati con cui sostituirli. In questo caso lo stai sostituendo con niente. La "g" dopo la barra finale significa eseguirlo "globalmente", cioè su tutto il file anziché sulla sola prima corrispondenza trovata.

Infine, invece di < input.txt > output.txt puoi usare l'opzione -i che significa modificare il file "in place". Significato, non è necessario creare un secondo file per contenere il risultato. Se usi questa opzione perderai il tuo file originale. 

22
Bryan Oakley

puoi usare awk

$ awk '{$1=$1}1' file
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)

sed

$ sed 's|^[[:blank:]]*||g' file
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)

Il ciclo while/read di Shell

while read -r line
do
    echo $line
done <"file"
10
ghostdog74

Questo codice Perl modifica il tuo file originale:

Perl -i -ne 's/^\s+//;print' file

Il prossimo fa una copia di backup prima di modificare il file originale:

Perl -i.bak -ne 's/^\s+//;print' file

Si noti che Perl prende in prestito pesantemente da sed (e awk)

5
Chris Koknat

FWIW, se stai modificando questo file, puoi probabilmente evidenziare tutte le linee e usare il pulsante non-tab. 

  • In vim, utilizzare shift-v per evidenziare le linee, quindi premere <<
  • Se sei su un Mac, puoi utilizzare Atom, Sublime, ecc., Quindi evidenziare con il mouse e quindi premere la scheda Maiusc.

Non sono sicuro se ci sia qualche requisito che questo deve essere fatto dalla riga di comando. Se è così, allora: thumbs-up: alla risposta accettata! =) 

0
Ben

sed -e 's/^ [\ t] * //' name_of_file_from_which_you_want_to_remove_space> 'nome _file_where_you_want_to_store_output'

Ad esempio: - sed -e 's/^ [\ t] * //' file1.txt> output.txt

Nota:

s /: comando sostitutivo ~ sostituzione per modello (^ [\ t] *) su ogni linea indirizzata

^ [\ t] *: Cerca pattern (^ - inizio della riga; [\ t] * corrisponde a uno o più spazi vuoti tra cui tab)

//: Sostituisci (cancella) tutto il modello abbinato

0
zahid

Ecco qui:

[email protected]:~$ sed 's/^[\t ]*//g' < file-in.txt

O:

[email protected]:~$ sed 's/^[\t ]*//g' < file-in.txt > file-out.txt
0
Joao da Silva