Para eliminar todas las líneas en blanco de un archivo de texto con el editor VIM, podemos usar cualquier de los siguientes dos comandos.
- :%s/^\n//g —> Elimina lineas en blanco
- :g/^\s*$/d —> Elimina lineas en Blanco
- :%s/\r/\r/g —> Elimina los ^M
- :%g/^$/d —> Elimina lineas vacias del archivo en cuestion
Como habran visto, existen diferentes combinaciones para eliminar lineas en blanco de un archivo.
Con el comando Sed seria:
Para eliminar lineas en blanco, donde la opción de sed para eliminar es d.
- sed ‘/^$/d’
Asi que para eliminar las líneas en blanco de un archivo llamado nomarch:
- sed ‘/^$/d’ nomarch
Si queremos redireccionar el resultado a un nuevo archivo llamado nomarch1 ejecutaríamos lo siguiente:
- $ sed ‘/^$/d’ nomarch >nomarch1
Así no modificaríamos el archivo original y tendríamos el archivo sin líneas en blanco en nomarch1. Ahora bien, eliminar líneas que contengan un patrón o palabra específico
Supongamos que queremos eliminar todas las líneas que contienen la palabra Windows de un archivo llamado nomarch2. Para esto ejecutamos:
- sed ‘/Windows/d’ nomarch2 > nomarch3
Aquí redireccionamos el resultado a un nuevo archivo llamado nomarch3
También existe otro método para eliminar caracter ^M de un archivo en Linux
El día de hoy pretendía ejecutar unos scripts ( creados en windows) en linux, y estos fallaron debido a que los scripts contenían ^M al final de cada linea.
Bien en Windows los archivos se almacenan en codificación ascii y en linux en unicode, es por esto que pasa este problema. Para eliminar este caracter basta con abrir el archivo con el editor vi y hacer lo siguiente:
En modo comando escribimos:
:%s/^M//g
y listo se eliminará el caracter ^M.
Pero también podemos auxiliarnos de la función tr -d “\r” en el prompt de linux para eliminarlo:
cat archivo.txt|tr -d "\r" >archivo.tmp mv archivo.tmp archivo.ext
Si tenemos varios archivos es un directorio podemos auxiliarnos de un for, para eliminar el caracter de todos los archivos:
for i in $(ls -1); do cat $i|tr -d "\r" >temporal.tmp mv temporal.tmp $i done
Sencillo, o no ???