วิธีเปรียบเทียบสองไฟล์ใน Linux

How Compare Two Files Linux



หากคุณต้องการเปรียบเทียบสองไฟล์และถอดรหัสความแตกต่าง คำสั่งที่เรียกว่า แตกต่าง ถูกนำมาใช้. คู่มือนี้เน้นที่การใช้ แตกต่าง คำสั่งพร้อมตัวเลือกต่าง ๆ เพื่อรับความแตกต่างระหว่างสองไฟล์

ดังนั้น . ทำอย่างไร แตกต่าง คำสั่งใช้งานได้จริง? NS แตกต่าง คำสั่งเปรียบเทียบทั้งสองไฟล์และแสดงรายการความแตกต่างระหว่างทั้งสองไฟล์ แม่นยำยิ่งขึ้น ให้รายการการแก้ไขที่ต้องทำในไฟล์แรกเพื่อให้ตรงกับไฟล์ที่สอง NS แตกต่าง คำสั่งยังใช้โดยโปรแกรมเมอร์เพื่อรับความแตกต่างระหว่างไฟล์ซอร์สโค้ดสองไฟล์เพื่อพัฒนาแพตช์







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



วิธีใช้คำสั่ง diff ใน Linux เพื่อเปรียบเทียบไฟล์:

ไวยากรณ์ของ แตกต่าง คำสั่งถูกกล่าวถึงด้านล่าง:



$แตกต่าง [ตัวเลือก] [ไฟล์1] [file2]

ขั้นแรก สร้างสองไฟล์ ฉันกำลังสร้างไฟล์ข้อความโดยใช้ชื่อ test_file_1.txt และ test_file_2.txt . ไฟล์เหล่านี้มีเนื้อหาที่มีความแตกต่างเล็กน้อย:





ตอนนี้ใช้คำสั่งต่อไปนี้เพื่อรับความแตกต่าง:



$แตกต่างtest_file_1.txt test_file_2.txt

เอาต์พุตมาตรฐานแสดงบรรทัดที่ตรงกันตามลำดับของไฟล์ที่กล่าวถึงในคำสั่ง มาถอดรหัสผลลัพธ์กัน:

การเปรียบเทียบไฟล์จะมีป้ายกำกับ และแต่ละป้ายจะมีตัวเลขอยู่ด้านใดด้านหนึ่ง รูปแบบมีดังนี้:

[หมายเลขบรรทัดของไฟล์ 1][Label(a,c,d)][หมายเลขบรรทัดของไฟล์ 2]

มีสามป้าย:

  • ถึง – เพิ่ม: เพิ่มเนื้อหาในไฟล์แรกเพื่อซิงค์กับไฟล์ที่สอง
  • – เปลี่ยนแปลง: ระบุว่าจำเป็นต้องแก้ไขเนื้อหาของไฟล์แรกเพื่อให้ตรงกับไฟล์ที่สอง
  • NS – ลบ: ลบเนื้อหาออกจากไฟล์แรกเพื่อให้ตรงกับไฟล์ที่สอง

2d1 หมายถึงลบบรรทัดที่ 2 ของไฟล์แรกเพื่อให้ตรงกับไฟล์ที่สองจากบรรทัดที่ 1

ในทำนองเดียวกัน 4c3 หมายถึงการเปลี่ยนแปลงในบรรทัดที่สี่ของไฟล์แรกเพื่อให้ตรงกับบรรทัดที่ 3 ของไฟล์ที่สองเนื่องจากทั้งสองบรรทัดมีความแตกต่างกันเล็กน้อย

มีอีกวิธีหนึ่งในการดูความแตกต่าง ใช้ แตกต่าง สั่งกับ -และ ตัวเลือก:

$แตกต่าง -และ -ใน 60test_file_1.txt test_file_2.txt

ในผลลัพธ์ข้างต้น เนื้อหาของ test_file_1.txt จะแสดงทางด้านซ้ายในขณะที่เนื้อหาของ text_file_2.txt จะแสดงทางด้านขวา ความแตกต่างถูกระบุโดยสัญลักษณ์:

  • | — เส้นจะแตกต่างกันในไฟล์ที่สอง
  • > — บรรทัดเพิ่มเติมในไฟล์ที่สอง
  • <— Line has been deleted from the second file

-W ระบุความกว้างระหว่างเนื้อหาของสองไฟล์ หากต้องการแยกและดูความแตกต่าง ให้ใช้สิ่งต่อไปนี้:

$แตกต่าง -และ -ใน 60 --suppress-common-linestest_file_1.txt test_file_2.txt

วิธีรับเอาต์พุตในหนึ่งบรรทัดโดยใช้คำสั่ง diff:

หากวิธีการติดป้ายกำกับนั้นยากสำหรับคุณในการถอดรหัส แสดงว่ามีแนวทางที่ง่ายกว่า ใช้ -NS ตัวเลือกด้วย แตกต่าง คำสั่งให้เอาต์พุตในบรรทัดเดียว ไม่มีข้อมูลเพิ่มเติมแม้ว่า:

$แตกต่าง -NStest_file_1.txt test_file_2.txt

หากไฟล์ต่างกัน คำสั่งดังกล่าวจะให้ผลลัพธ์ หากไฟล์เหมือนกันจะไม่มีเอาต์พุต เพื่อแสดงให้เห็น ฉันกำลังสร้างสำเนาของ test_file_1.txt โดยใช้:

$cptest_file_1.txt test_file_3.txt

ไฟล์ใหม่จะถูกสร้างขึ้นโดยใช้ชื่อ test_file_3.txt ที่มีเนื้อหาเดียวกันกับที่ test_file_1.txt มี. ตอนนี้ใช้:

$แตกต่าง -NStest_file_1.txt test_file_2.txt

เนื่องจากทั้งสองไฟล์มีเนื้อหาที่คล้ายคลึงกัน ดังนั้นจึงไม่มีเอาต์พุต

วิธีตรวจสอบความแตกต่างของไฟล์ในโหมดบริบทโดยใช้คำสั่ง diff:

เพื่อให้ได้การเปรียบเทียบในโหมดบริบท คำสั่ง -ค ตัวเลือกจะถูกใช้กับ แตกต่าง สั่งการ:

$แตกต่าง -คtest_file_1.txt test_file_2.txt

มาผ่าเอาท์พุตกัน

เพื่อรักษาความแตกต่าง ไฟล์แรกจะถูกระบุด้วย *** พร้อมกับวันที่และเวลาของการสร้าง ในขณะที่ไฟล์ที่สองจะถูกระบุด้วย —

บรรทัดถัดไปหมายถึงช่วงของเส้นที่พิจารณาระหว่างการเปรียบเทียบ สำหรับไฟล์แรก มันคือ *** 1.6 **** และสำหรับไฟล์ที่สอง มันคือ —1.5—- :

ความแตกต่างถูกระบุโดยสัญลักษณ์:

  • + : ไม่มีบรรทัดในไฟล์แรก แทรกลงในไฟล์แรกหรือลบออกจากไฟล์ที่สองเพื่อให้ตรงกับทั้งสองไฟล์
  • – : มีบรรทัดอยู่ในไฟล์แรก แต่ไม่มีในไฟล์ที่สอง ลองแทรกในไฟล์ที่สองหรือลบออกจากไฟล์แรกเพื่อให้ตรงกับทั้งสองไฟล์
  • ! : Line ต้องการการปรับเปลี่ยนเพื่อให้ตรงกัน

วิธีตรวจสอบความแตกต่างของไฟล์ในโหมดรวมโดยใช้คำสั่ง diff:

โหมดรวมจะค่อนข้างคล้ายกับโหมดบริบท แต่ไม่มีข้อมูลซ้ำซ้อน ธงที่เราใช้คือ -ยู :

$แตกต่าง -ยูtest_file_1.txt test_file_2.txt

ในผลลัพธ์ ไฟล์แรกถูกระบุด้วย — และไฟล์ที่สองด้วย +++ บรรทัดที่สองแสดงจำนวนบรรทัดที่พิจารณาเพื่อเปรียบเทียบในทั้งสองไฟล์ จากนั้นเนื้อหาที่จะลบ เพิ่ม หรือแก้ไขด้วยสัญลักษณ์ จะไม่มีสัญลักษณ์ที่มีบรรทัดที่คล้ายกันในทั้งสองไฟล์

วิธีละเว้นตัวพิมพ์เล็กในขณะที่ใช้คำสั่ง diff:

หากคุณต้องการเปรียบเทียบไฟล์โดยไม่สนใจความละเอียดอ่อนของตัวพิมพ์ ให้ใช้ปุ่ม -ผม ธง:

$แตกต่าง -ผมtest_file_1.txt test_file_2.txt

สำหรับการสาธิตฉันได้ทำ NS ของ Deepin ในไฟล์แรกขนาดเล็ก:

ดังที่เห็นในคำสั่งแรก ความแตกต่างจะถูกระบุ; ขณะใช้ -ผม ความแตกต่างนั้นได้ถูกลบออกไปแล้ว

ตัวเลือกที่มีประโยชน์อื่น ๆ ของ แตกต่าง คำสั่งอยู่ด้านล่าง:

ตัวเลือก คำอธิบาย
-ถึง ตัวเลือกนี้ถือว่าไฟล์ทั้งหมดเป็นไฟล์ข้อความ
-NS ละเว้นการแก้ไขโดยที่บรรทัดว่างเปล่าทั้งหมด
-และ ตัวเลือกนี้ละเว้นการขยายแท็บ
-ผม ละเว้นการเปลี่ยนแปลงที่ทุกบรรทัดตรงกัน
-NS ให้ผลลัพธ์เมื่อสองไฟล์เหมือนกัน
-ใน ไม่สนใจพื้นที่สีขาวทั้งหมด
-กับ ไม่สนใจช่องว่างที่ปลายบรรทัด

วิธีใช้ Vim Editor เพื่อเปรียบเทียบสองไฟล์:

อีกวิธีหนึ่งในการเปรียบเทียบสองไฟล์คือการใช้ vimdiff สั่งการ. เพื่อที่คุณจะต้องติดตั้ง vim:

$sudoฉลาดติดตั้ง ฉันมา

ตอนนี้เพื่อเปรียบเทียบสองไฟล์ให้ใช้:

$vimdiff test_file_1.txt test_file_2.txt

ไฟล์ทั้งสองจะถูกเปิดเคียงข้างกัน ส่วนที่ไม่ตรงกันจะถูกเน้น:

วิธีเปรียบเทียบสองไฟล์โดยใช้ colordiff:

อีกวิธีหนึ่งคือการจัดเรียงของส่วนขยายของ แตกต่าง สั่งการ. คุณสามารถทำให้การเปรียบเทียบสามารถระบุตัวตนได้มากขึ้นโดยการเพิ่มสีเข้าไป ในการติดตั้งให้ใช้:

$sudoฉลาดติดตั้งcolordiff

หากต้องการเปรียบเทียบไฟล์ ให้ใช้:

$colordiff test_file_1.txt test_file_2.txt

เปลี่ยนได้ แตกต่าง กับ colordiff เพื่อให้ได้ผลลัพธ์มาตรฐานของ แตกต่าง คำสั่งในรูปแบบสี

บทสรุป:

เพื่อเปรียบเทียบไฟล์ใน Linux และแม้แต่ใน macOS ยูทิลิตี้ที่ใช้เรียกว่า diff ยูทิลิตี้ diff เปรียบเทียบสองไฟล์และให้ข้อมูลเกี่ยวกับความแตกต่างระหว่างสองไฟล์ นักพัฒนาส่วนใหญ่ใช้คำสั่ง diff เพื่อสร้างไฟล์แพตช์

ในคู่มือนี้ เราได้กล่าวถึง แตกต่าง คำสั่งและวิธีใช้เปรียบเทียบสองไฟล์กับตัวเลือกที่ต่างกัน เรายังได้เรียนรู้วิธีการใช้งาน colordiff เพื่อทำให้ไฟล์แตกต่างเป็นที่รู้จักมากขึ้น แต่ถ้าคุณพบว่ายูทิลิตีแบบเทอร์มินัลใช้งานยาก ก็มีเครื่องมือที่ใช้ GUI ด้วยเช่นกัน เช่น Kompare, DiffMerge, Meld — Diff Tool และ Diffuse — GUI Giff Tool