Esto es muy útil para la inicialización de servicios, pero a la hora de resolver problemas recorrer un archivo con 3000 lineas no es práctico.
Buscando encontré esto que soluciona el problema pero tiene un defecto.
Por ejemplo, trabajando con Squid: /etc/squid/squid.conf
Si hacemos
grep "#" /etc/squid/squid.confNos mostrará en pantalla las lineas del archivo que posean el carácter #.
Ahora si invertimos la búsqueda con -v
grep -v "#" /etc/squid/squid.conf
Mostrará las ubicaciones donde no se encuentre el mismo, incluyendo lineas vacías, lo que "queda feo".
El autor propone limpiar la salida con grep -v "#" /etc/squid/squid.conf | sed -e '/^$/d' que cumple y deja solo las lineas que buscamos con el #.
Prestando un poco de atención, y buscando en Internet surgen 2 cosas:
- Si la linea tiene un # en cualquier lugar distinto del inicio no será mostrada, esto es un problema.
- NO necesitamos sed, grep es lo suficientemente flexible como para mostrarnos lo que queremos ver.
Ambas se solucionan con esto
grep '^[^#]' /etc/squid/squid.conf
¿Y esto, para que sirve?
En particular lo utilizo para limpiar los archivos y guardar solo las variables y configuraciones activas.
Según el ejemplo anterior
grep '^[^#]' /etc/squid/squid.conf > squid.conf.limpioGenera una copia del archivo solo con lo importante y listo para guardar.
Otra opción es crear un script de bash por si nos olvidamos como es el comando; generamos un documento de texto, lo llamamos sincom.sh y pegamos lo siguiente dentro :
#!/bin/bash
#Uso
#./sincomen.sh archivo_con_comentarios archivo_destino
grep '^[^#]' $1 > $2
Guardamos y le damos permisos de ejecución con chmod +x sincom.sh.
¡Listo!, ejecutando ./sincom.sh archivo_comentado archivo_limpio tenemos automatizada la tarea.
Espero sirva.