alex@goku:~$ cat pippo.txt 1 2 3 4 5 6 7
Se voglio cancellare le ultime n-righe uso il comando tail +(n+1) su un file visualizzato al contrario e poi ri-visualizzato nuovamente al contrario in modo da riportarlo nel suo stato iniziale. Ad esempio se voglio eliminare le ultime 3 righe:
alex@goku:~$ tac pippo.txt | tail +4 | tac 1 2 3 4
Purtroppo, in alcune versioni del comando tail, l’opzione tail +n non è implementata ma solo la classica tail -n. Si può simulare lo stesso comportamento calcolando il numero di righe totali e sottraendo il numero desiderato anche se il wc obbliga a leggere interamente il file.
alex@goku:~$ tac pippo.txt | tail -$(($(wc -l pippo.txt | awk '{print $1}')-3)) | tac 1 2 3 4
Se addirittura siete su un sistema Unix in cui non è presente il comando tac, come ad esempio Sun Solaris, allora bisogna leggere tutto il file e togliere la parte iniziale tramite head (e se il file è di dimensioni elevate allora tale sistema impiegherà parecchio tempo).
ALL=$(wc -l elenco.txt | awk '{print $1}') TOP=$(($LAST - 3)) head -$(echo $TOP) elenco.txt > elenco.txt.new mv elenco.txt.new elenco.txt
E’ possibile comunque simulare il comando tac tramite il sed.
alex@goku:~$ sed -n '1!G;h;$p' pippo.txt 7 6 5 4 3 2 1
Infine, sempre con il sed, è possibile cancellare direttamente l’ultima riga di un file; se tale comando lo eseguiamo in un ciclo otteniamo la cancellazione delle ultime n-righe.
alex@goku:~$ sed '$d' pippo.txt
[ad name=”HTML”]