різниця, де лінії здебільшого однакові, але вийшли з ладу?


23

Я хочу розрізнити два набори правил mod_rewrite. Набір ліній приблизно 90% однаковий, але порядок настільки різний, що в основному різниця говорить про те, що вони абсолютно різні.

Як я можу побачити, які рядки по-справжньому відрізняються між двома файлами, незалежно від номера їх рядка?


3
Передайте їх обом через sortкулак.
Шон Дж. Гофф

@Shawn Чи можу я це зробити, не створюючи (а потім видаляючи) два разові файли?
користувач394

Відповіді:


36

sortМожна використовувати файли в одному порядку, щоб diffпорівняти їх та визначити відмінності. Якщо у вас є підміна процесу, ви можете використовувати це і уникати створення нових відсортованих файлів.

diff <(sort file1) <(sort file2)

8

Для цього створили сценарій, який зберігає послідовність рядків недоторканими . Ось помічена версія важливих рядків:

# Strip all context lines
diff_lines="$(grep '^[><+-] ' | sed 's/^+/>/;s/^-/</')" || exit 0

# For each line, count the number of lines with the same content in the
# "left" and "right" diffs. If the numbers are not the same, then the line
# was either not moved or it's not obvious where it was moved, so the line
# is printed.
while IFS= read -r line
do
    contents="${line:2}"
    count_removes="$(grep -cFxe "< $contents" <<< "$diff_lines" || true)"
    count_adds="$(grep -cFxe "> $contents" <<< "$diff_lines" || true)"
    if [[ "$count_removes" -eq "$count_adds" ]]
    then
        # Line has been moved; skip it.
        continue
    fi

    echo "$line"
done <<< "$diff_lines"

if [ "${line+defined}" = defined ]
then
    printf "$line"
fi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.