แตกต่างแสดงบรรทัดที่แก้ไขจากไฟล์ที่ถูกต้องเท่านั้น


24

ฉันมีไฟล์aและbและผมอยากจะสายออกของที่มีการเปลี่ยนแปลงตั้งแต่มันถูกโคลนจากb aเพียงแค่บรรทัดที่แก้ไขไม่มีบริบทโดยรอบไม่มีเครื่องหมายตรงข้ามที่ต่างกัน

ฉันจะทำสิ่งนั้นโดยใช้เชลล์สคริปต์ได้อย่างไร (ไม่มี Python / Perl / PHP / ... )

Sed และ awk เป็นคำตอบที่ยอมรับได้

สำหรับตอนนี้สิ่งที่ฉันกำลังทำคือ diff -y กับ - suppress-common-lines และ sed โดยใช้การอ้างอิงย้อนกลับของ regex เพื่อดึงส่วนที่ถูกต้องหลังจากช่องว่าง จะต้องมีวิธีที่ดีกว่า

ใช้ perl (ซึ่งเป็นสิ่งต้องห้าม) ฉันจะทำสิ่งนี้:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'

คำตอบ:


34

ด้วยแพ็คเกจGNU diffutilsdiffสิ่งนี้จะแสดงผลเฉพาะบรรทัดจากไฟล์ b ซึ่งถูกแก้ไขหรือถูกแทรกใหม่:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b

4
น่ากลัว อัปยศข้อมูลถูกฝังอยู่ใน Texinfo และไม่มีคำใบ้ไว้ในหน้าคนที่ฉันอ่าน ..
Robottinosino

6

คุณต้องเพิ่มอีกหนึ่งตัวเลือก:

grep -vf file1 file2

ขณะนี้ไม่จำเป็นต้องเรียงแถว แต่ฉันคิดว่า grep ใช้หน่วยความจำมากขึ้นและจะขัดข้องสำหรับไฟล์ขนาดใหญ่
Sridhar Sarnobat

ไม่ทำงานหากบรรทัดซ้ำกันเช่นกัน
Jayen

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