berbeda di mana garis sebagian besar sama tetapi rusak?

23

Saya ingin membedakan dua set aturan mod_rewrite. Himpunan garis sekitar 90% identik, tetapi urutannya sangat berbeda sehingga pada dasarnya berbeda kata.

Bagaimana saya bisa melihat baris mana yang benar-benar berbeda antara dua file, terlepas dari nomor barisnya?

pengguna394
sumber
3
Lewati mereka berdua melalui sorttinju.
Shawn J. Goff
@ Shawn Bisakah saya melakukan ini tanpa membuat (dan menghapus sesudahnya) dua file satu kali?
user394

Jawaban:

36

sortdapat digunakan untuk mendapatkan file dalam urutan yang sama sehingga diffdapat membandingkannya dan mengidentifikasi perbedaannya. Jika Anda memiliki proses substitusi, Anda dapat menggunakannya dan menghindari membuat file yang diurutkan baru.

diff <(sort file1) <(sort file2)
Shawn J. Goff
sumber
8

Membuat skrip untuk ini yang menjaga urutan garis tetap utuh . Berikut adalah versi penting dari baris-baris penting:

# 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
l0b0
sumber