echo "abc" >>file.txt
mette una nuova riga dopo abc
, non prima. Se si finisce con abc
sulla propria linea, ciò significa che la nuova riga precedente abc
era già presente in file.txt
.
Si noti che è perfettamente normale che un file di testo termini in una nuova riga. Su unix, una riga è costituita da una sequenza di caratteri diversa da null⁰ o newline seguita da una nuova riga. 1 Pertanto qualsiasi file di testo non vuoto termina con un carattere di nuova riga.
Se vuoi aggiungere del testo all'ultima riga di un file, non puoi farlo con >>
, perché questo accoda sempre al file, quindi scrive sempre dopo l'ultima riga. È invece necessario uno strumento in grado di modificare un file esistente. Ad esempio, puoi usare sed :
sed '$ s/$/abc/' file.txt >file.txt.new && mv file.txt.new file.txt
Nel comando sed, il primo $
significa " s/REGEX/REPLACEMENT/
esegui il comando seguente solo sull'ultima riga", il comando sostituisce REGEX con REPLACEMENT e l'espressione regolare $
corrisponde alla fine della riga.
Il comando sed di Linux ha una funzione integrata per automatizzare questa sequenza di creazione di un nuovo file e sostituire, in modo da poter abbreviare
sed -i '$ s/$/abc/' file.txt
⁰ Questo è un byte nullo, che ASCII chiama NUL e Unicode chiama U + 0000. I programmi di elaborazione del testo possono o meno affrontare questo personaggio.
1 Vedere le definizioni di file di testo , linea e carattere di nuova riga nella sezione "Definizioni" del capitolo Definizioni di base di IEEE 1003.1-2008: 2016.