Localizar y eliminar líneas que coincidan con una expresión regular específica

Script cuyo objetivo no es otro que eliminar de un fichero todas aquellas líneas que contengan una cadena determinada. Para ello uso la muy potente y siempre buena amiga mía herramienta sed... La sintaxis, para este objetivo sería:

sed '/expresión regular o cadena/d' fichero

Si, solo eso, Es simplemente decirle a sed que encuentre esa y la sustituya por... Nada! Y bueno, la "d" al final lo que hace es eliminar esa línea en blanco...

Para eliminar las trazas, digamos, de una IP 192.168.1.1 del fichero access.log, quedaría algo así:

sed '/192.168.1.1/d' /var/log/squid3/access.log

Y voilá! Listo! Claro que esto lo que hará será devolvernos en la salida estándard el contenido de dicho fichero ya sin las líneas que alguna vez contuvieron la IP 192.168.1.1... Para guardar esto debemos enviar dicha salida a un fichero temporal y luego renombrarlo al fichero original... El proceso completo quedaría así:

sed '/192.168.1.1/d' /var/log/squid3/access.log > foo
mv foo /var/log/squid3/access.log

Y listo

Enjoy it !

Alternativamente puede filtrarse el archivo con grep y la opcion -v

grep -v cadena archivo > archivo_filtrado

Archivo filtrado contiene ahora todas las líneas del archivo original salvo aquellas que presentaban la cadena indicada

o si las expresiones regulares son mas complejas usar perl para ello. Hay que valorar que la expresión que estamos intentando eliminar puede estar partida en dos líneas por ejemplo.