รายงานต่างต่างกัน แต่ทั้งสองบรรทัดเหมือนกัน


55

ฉัน diff-ed 2 ไฟล์และได้รับ

1c1
< 1
---
> 1

ทั้งสองไฟล์มีเพียง "1" สิ่งนี้แตกต่างกันอย่างไร


โพสต์เนื้อหาของไฟล์ทั้งสองโปรด;)
Rinzwind

5
หากคุณใช้ diff -uตัวเลือกอาจอ่านง่ายขึ้น
Lekensteyn

@Rinzwind ทั้งสองไฟล์มีเพียงข้อความ 1 แต่ถ้าคุณต้องการดูเพิ่มเติมดูpastebin.com/byiqdie1
Jiew Meng

ขอโทษ มันไม่ได้เมื่อฉันทำอย่างนั้น จะต้องมีสิ่งที่แตกต่าง ทำcp 1 2(เขียนทับ 2) จากนั้นคุณสามารถมั่นใจได้ 100% b เหมือนกัน;)
Rinzwind

2
vimdiff file1 file2? : D
dylnmc

คำตอบ:


68

บรรทัดที่ 1: aหมายถึงการเพิ่มdการลบและcการเปลี่ยนแปลง หมายเลขบรรทัดของไฟล์ต้นฉบับจะปรากฏก่อนตัวอักษรเหล่านี้และหมายเลขของไฟล์ที่แก้ไขจะปรากฏขึ้นหลังตัวอักษร

บรรทัดที่ 2: บรรทัด<ที่มาจากไฟล์ 1 และแตกต่างจากไฟล์ 2

บรรทัดที่ 3 คือตัวแบ่ง

บรรทัดที่ 4: บรรทัด>ที่มาจากไฟล์ 2 และแตกต่างจากไฟล์ 1

(หากคุณเคยเห็น=หมายความว่าบรรทัดทั้งสองเหมือนกัน)

และปัญหาของคุณอาจเป็นช่องว่างหรือตัวละครอื่น ๆ ที่ไม่ใช่มนุษย์: สิ่งเหล่านั้นก็ก่อให้เกิดความแตกต่างเช่นกัน

มีบางตัวเลือกในการจัดการกับเอาต์พุต

ตัวอย่าง:

rinzwind @ discworld: ~ $ มากกว่า 1 
ทดสอบ
test2
test3
rinzwind @ discworld: ~ $ มากกว่า 2
ทดสอบ
test2  
test3

รูปแบบบริบท:

rinzwind @ discworld: ~ $ diff -c 1 2
*** 1 2011-08-13 17: 05: 40.433966684 +0200
--- 2 2011-08-13 17: 11: 24.369966629 +0200
***************
*** 1,3 ****
  ทดสอบ
! test2
  test3
--- 1,3 ----
  ทดสอบ
! test2  
  test3

A "!" แสดงให้เห็นถึงการเปลี่ยนแปลงระหว่างบรรทัดที่สอดคล้องในสองไฟล์ A "+" หมายถึงการเพิ่มบรรทัดในขณะที่พื้นที่ว่างหมายถึงบรรทัดที่ไม่เปลี่ยนแปลง ที่จุดเริ่มต้นของแพทช์เป็นข้อมูลไฟล์รวมถึงเส้นทางแบบเต็มและการประทับเวลา ที่จุดเริ่มต้นของแต่ละก้อนคือหมายเลขบรรทัดที่ใช้สำหรับการเปลี่ยนแปลงที่สอดคล้องกันในไฟล์ ช่วงจำนวนที่ปรากฏระหว่างชุดของสามดอกจันจะมีผลกับไฟล์ต้นฉบับในขณะที่ชุดของสามขีดกลางจะใช้กับไฟล์ใหม่ ช่วงก้อนใหญ่ระบุหมายเลขบรรทัดเริ่มต้นและจุดสิ้นสุดในไฟล์ที่เกี่ยวข้อง

การขยายความคิดเห็นของ Lekensteyn เกี่ยวกับรูปแบบรวม:

rinzwind @ discworld: ~ $ diff -u 1 2
--- 1 2011-08-13 17: 05: 40.433966684 +0200
+++ 2 2011-08-13 17: 11: 24.369966629 +0200
@@ -1,3 +1,3 @@
 ทดสอบ
-test2
+ test2  
 test3

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

ตัวเลือกที่มีประโยชน์:

-b ดูรายละเอียดการเปลี่ยนแปลงในพื้นที่สีขาว

-w ดูรายละเอียดพื้นที่สีขาวทั้งหมด

-B ละเว้นบรรทัดว่างทั้งหมด

-y เอาต์พุตใน 2 colums


ฉันจะตรวจสอบว่ามีอักขระที่ซ่อนอยู่ได้อย่างไร มีวิธีที่จะเพิกเฉยต่ออักขระที่ซ่อนอยู่หรือไม่ (อาจยกเว้นเพียงบรรทัดใหม่ & แท็บ) ฉันคิดว่าตัวละครที่ซ่อนอยู่ส่วนใหญ่เป็นอุบัติเหตุหรือไม่?
Jiew Meng

ฉันใส่ตัวเลือกที่มีประโยชน์ (คัดลอกจากman diff;))
Rinzwind

ฉันสังเกตเห็นว่าใช้งานแฟล็ก -b อืมผมไม่ได้เห็นความแตกต่างในช่องว่างใน Gedit :)
Jiew เม้ง

@JiewMeng รันod -x1zทั้งไฟล์และเปรียบเทียบodผลลัพธ์ ควรค้นหาความแตกต่างที่ซ่อนอยู่ระหว่างไฟล์
lgarzo

6

ฉันพบว่าod (octal dump) มีประโยชน์เมื่อเปรียบเทียบไฟล์ที่มีอักขระที่ไม่สามารถพิมพ์ได้ (โดยเฉพาะไฟล์ที่ diff ต่างกันคือ "ไบนารี่" และบอกคุณว่าพวกมันต่างกัน)

ในตัวอย่างด้านล่างฉันสร้างคู่ของไฟล์ที่อาจเหมือนไฟล์ต้นฉบับจากนั้นทำส่วนต่างกับเอาต์พุตต้นฉบับ ต่อไปฉันจะทำอย่างไรกับเอาต์พุต "od" ที่ต่างกัน

$ echo 1> 1
$ echo "1"> 2
$ diff 1 2

1c1  
< 1  
- ---  
> 1   

$ od -c 1> 1.od
$ od -c 2> 2.od
$ diff 1.od 2.od

1,2c1,2
< 0000000   1  \n
< 0000002
---
> 0000000   1      \n
> 0000003

$ od -Ax -c -t x1 1> 1.od
$ od -Ax -c -t x1 2> 2.od
$ diff 1.od 2.od

1,3c1,3
< 000000   1  \n
<         31  0a
< 000002
---
> 000000   1      \n
>         31  20  0a
> 000003

1

ฉันมีปัญหาเดียวกันและฉันพบวิธีแก้ไขปัญหาที่อาจช่วยได้ให้ใช้คำสั่ง:

dos2unix <file1> <file2>

หนึ่งในนั้นอาจอยู่ในรูปแบบ dos / windows และอีกหนึ่งรูปแบบของ UNIX

หลังจากฉันทำสิ่งนี้ความแตกต่างก็ดีทั้งหมด!



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