Diferenciar 2 archivos ignorando cadenas entre @ y [

Diferenciar 2 archivos ignorando cadenas entre @ y [

Estoy comparando dos archivos. Estoy intentando ignorar los caracteres alfanuméricos anteriores @y posteriores [. Una línea parece

model.Field@d6b0d6b[fieldName

Respuesta1

yo usaríasustituciones de procesosaquí:

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

Respuesta2

Supongo que lo eresusando bash.

si v="model.Field@d6b0d6b[fieldName"entonces puedes 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"

Puedes usar"$nuevo_v"o"$nuevo_v1"Depende de si quieres @ y [o no.


ComoSr. WijsmanComentado, mi respuesta no responde a la pregunta. Correcto, no le presté mucha atención al título. Arreglemoslo y ajustemos el código anterior con la siguiente función para imprimir los datos de un solo archivo 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 crear difflos dos archivos usando el siguiente comando:

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

Aquí hay un 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, se ignora el hecho de que las líneas son diferentes entre @ y [, y la única línea que es diferente entre los archivos es esta:

modelo.FieldIAMDIFFERENTfieldName

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

Respuesta3

Filtre los archivos de datos y luego realice diferencias:

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

Una alternativa es usar difftiene 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á de forma única las líneas que no se compararán. p.ej

diff -I 'dataexplorer.bigindex' file1 file2

información relacionada