Déjame aclarar sobre el carácter de nueva línea:
$ echo Hello > file1 ; cat file1
Hello
$ echo -n  Hello > file2 ; cat file2
Hello$ 
Aquí puede ver que file1tiene un carácter de nueva línea al final, mientras que file2no.
Ahora supongamos que tengo uno file:
$ cat file
Hello
Welcome to
Unix
$
Y quiero agregar and Linuxal final del archivo, luego echo " and Linux" >> filese agregará a la nueva línea. Pero quiero la última línea comoUnix and Linux
Entonces, para evitarlo, quiero eliminar el carácter de nueva línea al final del archivo. Por lo tanto, ¿cómo elimino el carácter de nueva línea al final del archivo?

sed '$s/$/ and linux/'Respuestas:
Si todo lo que quiere hacer es agregar texto a la última línea, es muy fácil con sed. Reemplace
$(coincidencia de patrón al final de la línea) por el texto que desea agregar, solo en las líneas del rango$(lo que significa la última línea).que en Linux se puede acortar a
Si desea eliminar el último byte de un archivo, Linux (más precisamente GNU coreutils) ofrece el
truncatecomando, que lo hace muy fácil.Una forma POSIX de hacerlo es con
dd. Primero determine la longitud del archivo, luego trúnquelo a un byte menos.Tenga en cuenta que ambos truncan incondicionalmente el último byte del archivo. Es posible que desee comprobar que es una nueva línea primero:
fuente
perl -pi -e 'chomp if eof' myfile. Comparadotruncateoddno te dejará con un archivo roto si enmyfilerealidad no tiene líneas nuevas.Sin embargo, puede eliminar el carácter de nueva línea de la línea
tr -d '\n':Puede eliminar el carácter de nueva línea al final del archivo utilizando la siguiente manera fácil:
head -c -1 fileDe
man head:truncate -s -1 filede
man truncate:fuente
head -c -1 file | tee fileseguro? ¿Noteetruncaría el archivo antes de comenzar?teesolo tiene que abrir el archivo, mientras queheadtiene que leer y escribir su contenido,teeen la práctica ganará la carrera, excepto en ocasiones para archivos muy pequeños.Puede lograr esto con perl como:
En comparación con
truncateoddesto no va a dejar con un archivo roto simyfiletenía saltos de línea en realidad no se arrastran.(la respuesta se construye a partir del comentario y se basa en esta respuesta )
fuente
Aquí hay una manera con
sed: en la última$línea ( ) del archivo, busque y reemplace cualquier cosa y todo (.*) con "lo que coincida" seguido de "y Linux":Una solución aún más simple, cortesía de Isaac , es:
Esto reemplaza el final de línea (simbólico) con el texto dado.
fuente