Eliminare dei caratteri di inizio riga in un file.

Eliminare gli spazi di inizio riga  della riga in un file è un'operazione frequente e concettualmente semplice ma che può mettere in difficoltà.

Capita spesso, per ragioni di ordine, leggibilità o altro, di voler eliminare dall'inizio di un file un carattere che si presenta una o più volte. Si pensi ad esempio agli spazie e alle tabulazioni.
C'è un modo immediato per farlo, sfruttando il comando loop del sed.
Supponiamo che il nostro file abbia nome file.txt e contenga le seguenti righe:
IT Naked
   aiuta il mondo 
     #dell'information technology
 con soluzioni semplici e mirate

Ci disturbano tutti quegli inutili spazi iniziali. Possiamo applicare il seguente comando:

  cat file.txt|sed ':loop;s/^\ //g;t loop' 

ottenendo in output questo risultato:

IT Naked

aiuta il mondo 
#dell'information technology
con soluzioni semplici e mirate


Come si vede, si tratta di una semplice sostituzione sed dello spazio  (). Inoltre, poiché ci interessano esclusivamente le occorrenze a inizio riga lo abbiamo ancorato col simbolo di circonflesso.
Tale istruzione è inglobata nel ciclo loop, dal quale si esce solo quando la sostituzione precedente fallisce, ossia quando sono terminati gli spazi.
Se si desidera, si può reindirizzare l'output verso un nuovo file: 

 cat file.txt|sed ':loop;s/^ //g;t loop'  > newfile.txt

Lo stesso comando si può applicare con minime variazioni per qualunque altro carattere, ad esempio, per le tabulazioni (\t): 

cat file.txt|sed ':loop;s/^\t//g;t loop'

i cancelletti:

cat file.txt|sed ':loop;s/^#//g;t loop'

(utile questo se si vuole decommentare una parte commentata bash style).

0 commenti:

Posta un commento