라인이 대부분 동일하지만 순서가 잘못된 차이점이 있습니까?

라인이 대부분 동일하지만 순서가 잘못된 차이점이 있습니까?

나는 두 개의 mod_rewrite 규칙 세트를 구별하고 싶습니다. 이 라인 세트는 약 90% 동일하지만 순서가 너무 다르기 때문에 차이점을 보면 기본적으로 완전히 다르다는 것을 알 수 있습니다.

줄 번호에 관계없이 두 파일 간에 실제로 어떤 줄이 다른지 어떻게 확인할 수 있나요?

답변1

sort파일을 동일한 순서로 배치하여 diff비교하고 차이점을 식별하는 데 사용할 수 있습니다. 프로세스 교체가 있는 경우 이를 사용하고 새 정렬 파일을 생성하지 않아도 됩니다.

diff <(sort file1) <(sort file2)

답변2

내가 하나 만들었어스크립트이렇게 하려면 라인 순서를 그대로 유지하십시오. 중요한 줄의 주석이 달린 버전은 다음과 같습니다.

# 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

답변3

내 오픈 소스 Linux 도구 "dif"는 차이점을 무시하면서 파일을 비교합니다.

정렬, 타임스탬프, 공백 또는 주석 무시, 검색/바꾸기 수행, 정규식과 일치하는 줄 무시 등을 위한 다양한 옵션이 있습니다.

입력 파일을 사전 처리한 후 이러한 중간 파일에 대해 Linux 도구 meld, gvimdiff, tkdiff, diff 또는 kompare를 실행합니다.

설치가 필요하지 않습니다. 다음에서 "dif" 실행 파일을 다운로드하여 실행하면 됩니다.https://github.com/koknat/dif

사용 사례에 따라 "정렬" 옵션을 사용해 보세요.

dif file1 file2 -sort

관련 정보