ความแตกต่าง -b และ -w


20

จากdiffmanpage:

-b, --ignore-space-change
      ignore changes in the amount of white space

-w, --ignore-all-space
      ignore all white space

จากนี้ฉันอนุมานว่าความแตกต่างระหว่าง-bและ-wตัวเลือกจะต้องมี-bความไวต่อประเภทของช่องว่าง (แท็บกับช่องว่าง) อย่างไรก็ตามดูเหมือนว่าจะไม่เป็นเช่นนั้น:

$ diff 1.txt 2.txt 
1,3c1,3
<     Four spaces, changed to one tab
<         Eight Spaces, changed to two tabs
<     Four spaces, changed to two spaces
---
>       Four spaces, changed to one tab
>               Eight Spaces, changed to two tabs
>   Four spaces, changed to two spaces
$ diff -b 1.txt 2.txt 
$ diff -w 1.txt 2.txt 
$

ดังนั้นอะไรคือความแตกต่างระหว่าง-bและ-wตัวเลือก? ทดสอบกับ diffutils 3.2 บน Kubuntu Linux 13.04

คำตอบ:


18

หน้าคนไม่ชัดเจนมากในจุดนั้น แต่หน้าข้อมูลที่ซับซ้อน:

1.2 ระงับความแตกต่างในการเว้นวรรคว่างและแท็บ

--ignore-tab-expansion( -E) ตัวเลือกที่จะไม่สนใจความแตกต่างระหว่างแท็บและช่องว่างในการป้อนข้อมูล แท็บนั้นถือว่าเทียบเท่ากับจำนวนช่องว่างที่หยุดในแท็บถัดไป (* หมายเหตุแท็บ: :)

--ignore-trailing-space( -Z) ตัวเลือกที่จะไม่สนใจพื้นที่สีขาวที่ปลายสาย

--ignore-space-change( -b) ตัวเลือกที่ดีกว่า-Eและ -Zรวม มันจะละเว้นพื้นที่สีขาวที่ปลายบรรทัดและพิจารณาลำดับอื่นทั้งหมดของอักขระช่องว่างหนึ่งตัวขึ้นไปภายในบรรทัดที่เทียบเท่ากัน ด้วยตัวเลือกนี้ให้diffถือว่าสองบรรทัดต่อไปนี้มีค่าเท่ากันซึ่งจะ$แสดงถึงจุดสิ้นสุดของบรรทัด:

 Here lyeth  muche rychnesse  in lytell space.   -- John Heywood$
 Here lyeth muche rychnesse in lytell space. -- John Heywood   $

--ignore-all-space( -w) ตัวเลือกที่แข็งแกร่งยังคง มันจะละเว้นความแตกต่างแม้ว่าหนึ่งบรรทัดจะมีพื้นที่สีขาวในขณะที่อีกบรรทัดหนึ่งไม่มีเลย อักขระ "white space" ประกอบด้วยแท็บแท็บแนวตั้งฟีดฟอร์มการขึ้นบรรทัดใหม่และช่องว่าง บางพื้นที่อาจกำหนดอักขระเพิ่มเติมให้เป็นช่องว่าง ด้วยตัวเลือกนี้ให้diff ถือว่าสองบรรทัดต่อไปนี้เทียบเท่ากันโดยที่$หมายถึงการสิ้นสุดของบรรทัดและ^Mแสดงถึงการขึ้นบรรทัดใหม่:

 Here lyeth  muche  rychnesse in lytell space.--  John Heywood$
   He relyeth much erychnes  seinly tells pace.  --John Heywood   ^M$

สำหรับโปรแกรมอื่น ๆ อีกหลายบรรทัด newline ยังเป็นอักขระ white space แต่diffเป็นโปรแกรมที่มุ่งเน้นบรรทัดและอักขระขึ้นบรรทัดใหม่จะลงท้ายด้วยบรรทัดเสมอ ดังนั้นตัวเลือก-wหรือ--ignore-all-spaceไม่ละเว้นการเปลี่ยนแปลงที่เกี่ยวข้องกับการขึ้นบรรทัดใหม่; มันไม่สนใจการเปลี่ยนแปลงพื้นที่สีขาวเท่านั้น


6

ดูเหมือนว่ามันเป็นช่องว่างระหว่างคำอาจมากกว่า แต่นี่คือผลลัพธ์ของฉัน:

diff 1.txt 2.txt 
1,2c1,2
< test
< next next
---
> te  st     
> next  next


diff -b 1.txt 2.txt 
1c1
< test
---
> te  st 

ผลลัพธ์จาก -w คืออะไร

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