나는 두 개의 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