
Ich vergleiche zwei Dateien. Ich versuche, die alphanumerischen Zeichen nach @
und vor zu ignorieren [
. Eine Zeile sieht aus wie
model.Field@d6b0d6b[fieldName
Antwort1
ich würde ... benutzenProzesssubstitutionenHier:
diff <(sed 's/@[^[]*/@/' old) <(sed 's/@[^[]*/@/' new)
Antwort2
Ich nehme an, Sie sindmit Bash.
Wenn v="model.Field@d6b0d6b[fieldName"
ja, können Sie Folgendes tun:
# 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"
Sie können„$neu_v“oder„$neu_v1“hängt davon ab, ob Sie @ und [ möchten oder nicht.
AlsHerr Wijsmankommentiert, meine Antwort beantwortet die Frage nicht. Richtig, ich habe dem Titel nicht viel Aufmerksamkeit geschenkt. Lassen Sie uns das beheben und den obigen Code mit der folgenden Funktion umschließen, um die Daten einer einzelnen Datei nach Bedarf auszudrucken
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"
}
Nun können wir diff
die beiden Dateien mit dem folgenden Befehl löschen:
diff <(pf file1.txt) <(pf file2.txt)
Hier ist ein Beispielausgabe
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$
Wie Sie sehen, wird die Tatsache, dass die Zeilen zwischen @ und [ unterschiedlich sind, ignoriert und die einzige Zeile, die sich zwischen den Dateien unterscheidet, ist diese:
Modell.FieldIAMDIFFERENTFeldname
Es tut mir leid, dass ich Ihrem Titel als Teil der Frage nicht sorgfältig Beachtung geschenkt habe.
Antwort3
Filtern Sie die Datendateien und führen Sie dann einen Diff-Vorgang durch:
sed 's/\@.*\[/@[/' file1 > file1.filt
sed 's/\@.*\[/@[/' file2 > file2.filt
diff file1.filt file2.filt
Alternativ kann diff
die Option -I verwendet werden. Alle Zeilen, die dem Muster entsprechen, werden beim Diff-Vergleich ignoriert. Wählen Sie ein Muster aus, das eindeutig die Zeilen auswählt, die nicht verglichen werden sollen. Beispiel:
diff -I 'dataexplorer.bigindex' file1 file2