Сравнивает 2 файла, игнорируя строки между @ и [

Сравнивает 2 файла, игнорируя строки между @ и [

Я сравниваю два файла. Я пытаюсь игнорировать буквенно-цифровые символы после @и до [. Строка выглядит так

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

Связанный контент