Pregunta

diff tiene una -I regexp opción, que ignora los cambios que acaba de insertar o líneas de borrado que coinciden con la expresión regular dada. Necesito un análogo de esta, para el caso, cuando los cambios son entre dos líneas (en lugar de insertar o líneas de borrado).

Por ejemplo, quiero hacer caso omiso de todas las diferencias como entre "abXd" y "abYd", para determinado X y Y.

Parece diff no tiene este tipo de capacidad. ¿Hay alguna alternativa adecuada para diff?

¿Fue útil?

Solución

Se puede filtrar los archivos a través de dos sed para eliminar las líneas que no importan. El patrón general se /regex1/,/regex2/ d a nada de borrar las líneas que coincidan entre dos expresiones regulares. Por ejemplo:

diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)

Otros consejos

La mejora de la anterior solución por John Kugelman:

diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)

es probablemente lo que puede estar buscando! Esta versión normaliza el cambio específico en cada línea sin borrar la propia línea. Esto permite diff para mostrar cualquier otro las diferencias que se mantienen en la línea.

Suponiendo que X e Y son personajes individuales, entonces -I 'ab[XY]d' funciona bien para mí.

Se podría usar sed para reemplazar instancias del patrón con una cadena estándar:

diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top