ฉันรู้ว่าเราสามารถใช้dos2unixเพื่อแปลงระหว่างการยกเลิกบรรทัดของ Windows และ Unix ฉันสงสัยว่ามีคำสั่งใดบ้างที่สามารถบอกฉันได้ว่าไฟล์มีการยกเลิกบรรทัดของ Windows หรือ Unix หรือไม่?
ฉันรู้ว่าเราสามารถใช้dos2unixเพื่อแปลงระหว่างการยกเลิกบรรทัดของ Windows และ Unix ฉันสงสัยว่ามีคำสั่งใดบ้างที่สามารถบอกฉันได้ว่าไฟล์มีการยกเลิกบรรทัดของ Windows หรือ Unix หรือไม่?
คำตอบ:
$ 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 ใช้
file -m magicfile f1 f2 f3
บน Windows วิธีที่จะบอกได้อย่างรวดเร็วคือการเปิดไฟล์ของคุณใน Notepad Notepad จะแสดงตัวแบ่งบรรทัดเฉพาะในการยกเลิกสไตล์ของ Windows (CR + LF) และไม่ใช่การยกเลิกยูนิกซ์ (LF) ดังนั้นข้อความยูนิกซ์ของคุณจะเป็นดังนี้:
Line1Line2Line3Line4
ในขณะที่ข้อความ windows จะมีลักษณะเช่นนี้:
line1
line2
line3
line4
ฉันไม่ค่อยคุ้นเคยกับแพลตฟอร์ม unix / linux แต่ฉันแน่ใจว่าคุณสามารถใช้แฮ็กที่คล้ายกันกับโปรแกรมเช่น gedit หรือ emacs
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สคริปต์ของหน้าต่างได้
คุณสามารถเพียงไพพ์ไฟล์ของคุณ
fileไม่สายเอาท์พุทสิ้นสุดสถานะถ้ามันสามารถพบการแข่งขันใกล้กว่า ASCIIsetup.py: a python script text executableคือ ดูเหมือนจะไม่สามารถค้นหาการตั้งค่าสถานะเพื่อเปลี่ยนลักษณะการทำงาน