Solaris 10: elimina las líneas en blanco finales de varios files

Estoy trabajando en Solaris 10. ¿Cuál es la forma más fácil de eliminar líneas en blanco de varios files a la vez?

Un pequeño script rápido debería funcionar. Obtuve esto de nixCraft hace un time y funciona bastante bien.

#!/bin/sh files="/home/me/data/*.txt" for i in $files do sed '/^$/d' $i > $i.out mv $i.out $i done 

Reemplaza $files para tus necesidades.

Será más fácil eliminar todas las líneas en blanco:

 sed -i.bak '/^$/d' $FILES 

Esto creará una copy de security con la extensión .bak , .bak si no quieres una copy de security.

Si desea eliminar líneas con espacios en blanco (y solo espacios en blanco) también, agregue \W* :

 sed -i.bak '/^\W*$/d' $FILES 

Y esto funciona con la opción --posix en gnu sed (desactiva las extensiones de gnu, así que creo que esto debería funcionar en los Solaris):

 sed -i.bak '/^[ \t]*$/d' $FILES 

Agregue más espacios en blanco si es necesario.

Diferentes forms de eliminar solo las líneas vacías finales:

 printf %s\\n "$(cat file)"|sponge file tac file|awk /./,0|tac|sponge file perl -0777 -pi -e 's/\n*$/\n/' file gsed -i ':1;/^\n*$/{$d;N;b1}' file bsdsed -i '' -e :1 -e '/^\n*$/{$d;N;b1' -e '}' file 

Las sustituciones de command eliminan todos los avances de línea, por ejemplo echo "$(printf 'a\n\n')b" imprime ab .

sponge es de moreutils.

Reemplace tac con tail -r en BSD.

perl -0777 establece $_ en toda la input y -p prints $_ después de cada línea. Ver man perlrun .

: establece una label, b twigs en una label, $d elimina el espacio del patrón en la última línea y N agrega la siguiente línea al espacio del patrón.

GNU sed permite los puntos y coma después de : b pero POSIX y BSD sed no. -i funciona con GNU sed pero no BSD sed y -i '' funciona con BSD sed pero no con GNU sed .

Puede usar el siguiente command de una sola línea para eliminar líneas en blanco en varios files

 find directoryname -name "filename" -print | xargs sed -i '/^$/d' 

Si, por ejemplo, desea eliminar las líneas en blanco de todos los files encontrados en el directory actual y sus subdirectorys, puede usar el siguiente command:

 find . -name "*.*" -print | xargs sed -i '/^$/d'