
Я сравниваю два файла. Я пытаюсь игнорировать буквенно-цифровые символы после @
и до [
. Строка выглядит так
model.Field@d6b0d6b[fieldName
решение1
я хотел бы использоватьзамена процессаздесь:
diff <(sed 's/@[^[]*/@/' old) <(sed 's/@[^[]*/@/' new)
решение2
Я предполагаю, что выс использованием Баша.
если v="model.Field@d6b0d6b[fieldName"
то вы можете сделать следующее:
# 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"
Вы можете использовать"$new_v"или"$new_v1"зависит от того, нужны ли вам @ и [ или нет.
КакГ-н Вайсманпрокомментировал, мой ответ не отвечает на вопрос. Правильно, я не обратил особого внимания на заголовок. Давайте исправим это и обернем код выше следующей функцией для печати данных одного файла по мере необходимости
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"
}
Теперь мы можем открыть diff
два файла, используя следующую команду:
diff <(pf file1.txt) <(pf file2.txt)
Вот Пример вывода
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$
Как видите, тот факт, что строки между @ и [ различаются, игнорируется, и единственная строка, которая отличается между файлами, это:
модель.FieldIAMDIFFERENTfieldName
Извините, что не обратил должного внимания на заголовок вашего вопроса.
решение3
Отфильтруйте файлы данных, затем выполните сравнение:
sed 's/\@.*\[/@[/' file1 > file1.filt
sed 's/\@.*\[/@[/' file2 > file2.filt
diff file1.filt file2.filt
Альтернативой является использование diff
опции -I . Любые строки, соответствующие шаблону, игнорируются при сравнении различий. Выберите шаблон, который будет однозначно выбирать строки, которые не нужно сравнивать. Например
diff -I 'dataexplorer.bigindex' file1 file2