Diff 2 files ignorando cadenas entre @ y [

Estoy comparando dos files. Estoy intentando ignorar los caracteres alfanuméricos después de @ y antes de [ . Una línea se ve como

 model.Field@d6b0d6b[fieldName 

Yo usaría sustituciones de processs aquí:

 diff <(sed 's/@[^[]*/@/' old) <(sed 's/@[^[]*/@/' new) 

Supongo que estás usando Bash .

Si v="model.Field@d6b0d6b[fieldName" , puede hacer lo siguiente:

 # Extract the right side of "$v" r="${v#*[}" # Extract the left side of "$v" l="${v%@*}" # Combine new_v="$l@[$r"; new_v1="$l$r" 

Puede usar "$ new_v" o "$ new_v1" dependiendo de si desea @ y [o no.


Como comentó el Sr. Wijsman , mi respuesta no responde la pregunta. Correcto, no presté mucha atención al título. Arreglemos y envolvemos el código anterior con la siguiente function para imprimir los datos de un solo file según sea necesario

 pf() { while read -r line; do # This is a bit fancy but does the same thing as the code above. printf '%s\n' "${line%@*}${line#*[}" done < "$1" } 

Ahora, podemos diff los dos files usando el siguiente command:

 diff <(pf file1.txt) <(pf file2.txt) 

Aquí hay una salida de muestra

 rany$ cat file1.txt model.Field1@__A__[fieldName model.FieldIAMDIFFERENT@__B__[fieldName model.Field1@__C__[fieldName rany$ cat file2.txt model.Field1@__C__[fieldName model.Field1@__D__[fieldName model.Field1@__E__[fieldName rany$ diff <(pf file1.txt) <(pf file2.txt) 2c2 < model.FieldIAMDIFFERENTfieldName --- > model.Field1fieldName rany$ 

Como puede ver, el hecho de que las líneas sean diferentes entre @ y [está siendo ignorado, y la única línea que es diferente entre los files es esta:

model.FieldIAMDIFFERENTfieldName

Lamento no haber prestado mucha atención a su título como parte de la pregunta.

Filtra los files de datos, luego realiza diff-:

 sed 's/\@.*\[/@[/' file1 > file1.filt sed 's/\@.*\[/@[/' file2 > file2.filt diff file1.filt file2.filt 

Una alternativa es usar diff tiene una opción -I. Cualquier línea que coincida con el patrón se ignora en la comparación de diferencias. Seleccione un patrón que seleccionará únicamente las líneas que no se comparan. p.ej

diff -I 'dataexplorer.bigindex' file1 file2