มีวิธีการระบุไฟล์อย่างรวดเร็วด้วย Windows หรือ Unix line line หรือไม่?


8

ฉันรู้ว่าเราสามารถใช้dos2unixเพื่อแปลงระหว่างการยกเลิกบรรทัดของ Windows และ Unix ฉันสงสัยว่ามีคำสั่งใดบ้างที่สามารถบอกฉันได้ว่าไฟล์มีการยกเลิกบรรทัดของ Windows หรือ Unix หรือไม่?

คำตอบ:


11
$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text

หากคุณรู้สึกว่าจำเป็นต้องตรวจสอบทุกบรรทัดในไฟล์คุณสามารถทำได้:

$ grep -c "^M" f1 f2
f1:0
f2:3

$ wc -l f1 f2
 3 f1
 3 f2
 6 total

ป้อน "^ M" โดยใช้ Ctrl + V Ctrl + M และเป็นอักขระ ASCII carriage-return (CR)

ที่นี่เราเห็นว่าไฟล์ f1 มีสามบรรทัด แต่ไม่มี CR ดังนั้นการสิ้นสุดบรรทัดทั้งหมดต้องเป็น LF เดี่ยวสไตล์ Unix

ไฟล์ f2 มีจำนวนบรรทัดและ CR เท่ากันดังนั้นจึงมีเหตุผลที่จะคาดเดาว่าจะใช้จุดสิ้นสุดบรรทัด CR, LF ตามที่ MSDOS และ Windows ใช้


1
fileไม่สายเอาท์พุทสิ้นสุดสถานะถ้ามันสามารถพบการแข่งขันใกล้กว่า ASCII setup.py: a python script text executableคือ ดูเหมือนจะไม่สามารถค้นหาการตั้งค่าสถานะเพื่อเปลี่ยนลักษณะการทำงาน
miracle2k

1
@ miracle2k: อาจจะสร้าง magicfile แบบกำหนดเองเพื่อทำสิ่งนี้ file -m magicfile f1 f2 f3
RedGrittyBrick

1

บน Windows วิธีที่จะบอกได้อย่างรวดเร็วคือการเปิดไฟล์ของคุณใน Notepad Notepad จะแสดงตัวแบ่งบรรทัดเฉพาะในการยกเลิกสไตล์ของ Windows (CR + LF) และไม่ใช่การยกเลิกยูนิกซ์ (LF) ดังนั้นข้อความยูนิกซ์ของคุณจะเป็นดังนี้:

Line1Line2Line3Line4

ในขณะที่ข้อความ windows จะมีลักษณะเช่นนี้:

line1
line2
line3
line4

ฉันไม่ค่อยคุ้นเคยกับแพลตฟอร์ม unix / linux แต่ฉันแน่ใจว่าคุณสามารถใช้แฮ็กที่คล้ายกันกับโปรแกรมเช่น gedit หรือ emacs


0
c=($(perl -0777ne 'print $_ =~ tr/\n//; print " "; 
                   print $_ =~ tr/\r//;'))
if   ((!(c[0] +   c[1]))) ;then echo no line endings  
elif ((  c[0] && !c[1] )) ;then echo LF
elif (( !c[0] &&  c[1] )) ;then echo CR 
elif ((  c[0] ==  c[1] )) ;then echo CRLF 
else echo "anbigious LF ${c[0]} CR ${c[1]}"
fi

โปรดทราบว่าเพื่อประโยชน์ของความเร็วจะนับเฉพาะ\rs และ\ns เท่านั้น แต่มันจะเป็นไฟล์ที่สวยแปลกประหลาดที่มีจำนวนเท่ากันทั้งสองประเภทและยังไม่ใช่ไฟล์ Windows CRLF ...

นอกจากนี้โปรดทราบว่าเครื่องมือ * nix fileไม่ได้ทำการสแกนอย่างสมบูรณ์ของไฟล์ในขณะที่perlสคริปต์นี้ทำ คุณยังไม่ได้พูดถึงแพลตฟอร์มที่คุณต้องการให้ทำงาน ฉันใช้bashสคริปต์เพื่อทดสอบผลลัพธ์ของ perl แต่สามารถเปลี่ยนเป็นcmdสคริปต์ของหน้าต่างได้

คุณสามารถเพียงไพพ์ไฟล์ของคุณ

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