2012-04-18 19 views
15

Tengo una irritante herramienta de código cerrado que escribe información específica en su archivo de configuración. Si luego intenta usar la configuración en un archivo diferente, entonces carga el archivo anterior. Grrr ...¿Cómo elimino todas las líneas que coinciden con un patrón de un conjunto de archivos?

Afortunadamente, los archivos de configuración son texto, así que puedo controlar las versiones, y resulta que si uno solo elimina la línea ofensiva del archivo, no se hace daño.

Pero la herramienta sigue volviendo a poner las líneas. Así que cada vez que quiero verificar nuevas versiones de los archivos de configuración, tengo que eliminar todas las líneas que contienen el símbolo openDirFile.

Estoy a punto de construir algún tipo de comando bash para ejecutar grep -v en cada archivo, almacenar el resultado en un archivo temporal, y luego eliminar el original y renombrar el temporal, pero me preguntaba si alguien sabía de un buena solución limpia, o ya había inventado y depurado una invocación similar.

Para obtener crédito adicional, ¿cómo se puede hacer esto sin destruir un enlace simbólico en el mismo directorio (favourite.rc-> signals.rc)?

Respuesta

18
sed -i '/openDirFile/d' *.conf 

esto ¿la eliminación de todos los archivos conf

también se puede combinar con la línea de comandos "encontrar" si los archivos de conf se encuentran en diferentes caminos.

Tenga en cuenta que "haré la eliminación" en su lugar ".

+0

impresionante, ¿cómo no sabía sobre esto? –

0

Esta fue la fiesta-hechizo que se me ocurrió: Respuesta

for i in *.rc ; do TMP=$(mktemp) ; grep -v openDirFile ${i} >${TMP} ; mv ${TMP} ${i} ; done 

de Kent es claramente superior.

Cuestiones relacionadas