Come aggiungere un testo all'inizio di un file, in Linux
In un precedente articolo ci siamo occupati di come aggiungere un testo alla fine di un file.
In questo articolo, invece, vediamo come aggiungere del testo all'inizio di un file.
Ci sono vari modi per ottenere questo risultato, cominciamo con il comando sed.
Il comando SED
Supponiamo di avere un file di testo, qui localizzato "/var/www/html/test.txt", e con questo contenuto:
pippo
pluto
paperino
Per aggiungere un testo all'inizio del file, ad esempio "Minnie", utilizziamo il comando sed in questo modo
# sed -i '1i minnie' /var/www/html/test.txt
Spieghiamo velocemente i parametri utilizzati nel comando sed
- -i: aggiornernal contenuto del file e lo salverà automaticamente
- 1i: indica a sed di inserire la frase nella prima riga del file
Verifichiamo adesso il contenuto del file (utilizziamo il comando cat)
#cat /var/www/html/test.txt
minnie
pippo
pluto
paperino
In alternativa a quanto visto, questo comando visualizza il risultato senza sovrascrivere il file
# sed '1 s/^/minnie\n/' /var/www/html/test.txt
minnie
pippo
pluto
paperino
In questo caso, il comando sed legge il contenuto del file, inserisce il nuovo testo all'inizio (nota: "\n" serve a mandare a capo dopo il nuovo testo), e visualizza il tutto a terminale.
Per salvare in un file il nuovo contenuto dobbiamo aggiungere il nome del file di destinazione
# sed '1 s/^/minnie\n/' /var/www/html/test.txt > /var/www/html/testfinale.txt
In questo modo non avremo un output a terminale, lo stesso infatti sarà stato salvato all'interno del nuovo file "testfinale.txt" (">" crea un nuovo file se non esiste, in caso contrario lo sovrascrive).
Si può usare anche questa scrittura:
# sed '1s;^;minnie\n;' /var/www/html/test.txt > /var/www/html/testfinale.txt
Vediamo adesso un modo alternativo, più complesso e senza il comando sed, per ottenere lo stesso risultato.
Utilizzo di un file temporaneo
Una via alternativa per aggiungere un testo all'inizio di un file è creare un file temporaneo contenente il nuovo contenuto, ad esempio così:
# echo 'minnie' > /var/www/html/tmpfile.txt
Creato il file, che abbiamo chiamato "tmpfile.txt", utilizziamo il comando "cat" per appendere il testo del file originario "test.txt" nel nuovo file temporaneo, così:
# cat /var/www/html/test.txt >> /var/www/html/tmpfile.txt
A questo punto il file temporaneto "tmpfile.txt" conterrà il contenuto desiderato... non ci basta che rinonimare questo file temporaneo con il nome del file originario "test.txt"
# mv /var/www/html/tmpfile.txt /var/www/html/test.txt
Ci verrà chiesto se sovrascrivere il file "test.txt", rispondiamo di si. Così facendo il file temporaneo è sparito, in quanto è diventato il file "test.txt".
E visto che siete così bravi, potevate fare tutto questo con una sola riga di comando:
echo "xxxxx" | cat /var/www/html/test.txt > /var/www/html/tmpfile.txt && mv /var/www/html/test.txt /var/www/html/tmpfile.txt
Torniamo adesso al comando "sed" e chiudiamo l'articolo con alcuni suoi utilizzi.
Aggiungere un testo ad ogni file di una directory
Se avessimo più files in una directory e volessimo aggiungere un testo, all'inizio di ogni riga, di tutti i files in essa presenti, operiamo così:
1 - entriamo nella directory, ad esempio "/var/www/html"
2 - lanciamo un ciclo ("loop") come questo: per ogni ("for") file della directory, esegui ("do") il comando sed.
for i in $( ls * ); do sed -i '1 s/^/aggiungo questa riga\n/' $i; done
Aggiungere un testo all'inizio (o alla fine) di ogni riga
Ecco come aggiungere un testo all'inizio ogni riga ...
# sed -i "s/^/minnie/g" /var/www/html/test.txt
... o alla fine di ogni riga del file
# sed -i "s/$/minnie/g" /var/www/html/test.txt
E con questo, anche per oggi abbiamo concluso.