Tengo un comando sed que quiero ejecutar en un archivo HTML enorme, terrible y feo que se creó a partir de un documento de Microsoft Word. Todo lo que debe hacer es eliminar cualquier instancia de la cadenaCoincidir con cualquier carácter (incluidas las líneas nuevas) en sed
style='text-align:center; color:blue;
exampleStyle:exampleValue'
El comando sed que estoy tratando de modificar es
sed "s/ style='[^']*'//" fileA > fileB
Funciona muy bien, excepto que cada vez que hay una nueva línea dentro de la texto coincidente, no coincide. ¿Hay algún modificador para sed, o algo que pueda hacer para forzar el emparejamiento de cualquier personaje, incluidas las nuevas líneas?
Entiendo que las expresiones regulares son terribles en XML y HTML, blah blah blah, pero en este caso, los patrones de cadena están bien formados porque los atributos de estilo siempre comienzan con una sola comilla y terminan con una sola comilla. Entonces, si pudiera resolver el problema de la nueva línea, podría reducir el tamaño del HTML en más del 50% con solo un comando.
Al final, resultó que el script perl de Sinan Ünür funcionaba mejor. Fue casi instantáneo, y redujo el tamaño del archivo de 2.3 MB a 850k. Good ol 'Perl ...
sed se basa en línea. Ese es el principal punto de parada aquí.Si usa el modificador/g regex, puede haber una opción de línea de comando para que lea el archivo como una sola 'línea', pero lo dudo (problemas de memoria y cosas por el estilo) –
No hay opción (que yo sepa de) para leer un archivo como una sola línea. Usaría Perl para esto. – Dana
Pero sed tiene los medios para agregar nuevas líneas en el espacio del patrón y el espacio de espera, por lo que es posible hacer un procesamiento de varias líneas en sed; simplemente no es bonito. – Beano