ต่างกันตรงไหนที่เส้นส่วนใหญ่เหมือนกัน แต่ไม่เป็นระเบียบ?


23

ฉันต้องการแยกกฎ mod_rewrite สองชุด ชุดของเส้นเหมือนกันประมาณ 90% แต่ลำดับแตกต่างกันมากโดยทั่วไปต่างบอกว่าพวกเขาแตกต่างกันโดยสิ้นเชิง

ฉันจะดูว่าบรรทัดใดที่แตกต่างกันอย่างแท้จริงระหว่างสองไฟล์โดยไม่คำนึงถึงหมายเลขบรรทัดของพวกเขา


3
ผ่านพวกเขาทั้งสองผ่านsortกำปั้น
Shawn J. Goff

@Shawn ฉันสามารถทำสิ่งนี้ได้โดยไม่ต้องสร้าง (และลบหลังจากนั้น) ไฟล์ one-off สองไฟล์?
user394

คำตอบ:


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.