khác ở đâu các dòng chủ yếu giống nhau nhưng không theo thứ tự?


23

Tôi muốn khác hai bộ quy tắc mod_rewrite. Tập hợp các dòng giống nhau khoảng 90%, nhưng thứ tự khác nhau đến mức về cơ bản nói rằng chúng hoàn toàn khác nhau.

Làm cách nào tôi có thể thấy dòng nào thực sự khác nhau giữa hai tệp, bất kể số dòng của chúng là gì?


3
Vượt qua cả hai qua sortnắm tay.
Shawn J. Goff

@Shawn Tôi có thể làm điều này mà không cần tạo (và xóa sau đó) hai tệp một lần không?
dùng394

Câu trả lời:


36

sortcó thể được sử dụng để đưa các tệp vào cùng một thứ tự để diffcó thể so sánh chúng và xác định sự khác biệt. Nếu bạn có quá trình thay thế, bạn có thể sử dụng nó và tránh tạo các tệp được sắp xếp mới.

diff <(sort file1) <(sort file2)

8

Tạo một kịch bản cho điều này mà giữ cho chuỗi dòng nguyên vẹn . Đây là phiên bản chú thích của các dòng quan trọng:

# 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.