ฉันจะแปลงตัวแบ่งบรรทัดในไฟล์ข้อความระหว่างรูปแบบ Windows และ Unix / Linux ได้อย่างไร
ฉันมีสภาพแวดล้อม * nix แต่ฉันต้องนำเข้าและส่งออกข้อมูลด้วยตัวแบ่งบรรทัดสไตล์ Windows ฉันคิดว่าจะมียูทิลิตี้มาตรฐานหรือคำสั่งให้ทำเช่นนี้ แต่ฉันไม่พบมัน
ฉันจะแปลงตัวแบ่งบรรทัดในไฟล์ข้อความระหว่างรูปแบบ Windows และ Unix / Linux ได้อย่างไร
ฉันมีสภาพแวดล้อม * nix แต่ฉันต้องนำเข้าและส่งออกข้อมูลด้วยตัวแบ่งบรรทัดสไตล์ Windows ฉันคิดว่าจะมียูทิลิตี้มาตรฐานหรือคำสั่งให้ทำเช่นนี้ แต่ฉันไม่พบมัน
คำตอบ:
คุณอาจมองหาdos2unix, unix2dos, todosหรือfromdosขึ้นอยู่กับการกระจายของคุณ แพ็คเกจ Ubuntu / Debian todos/ fromdosเป็นส่วนหนึ่งของแพ็คเกจtofrodosจากหน่วยความจำ
dos2unix/unix2dosบน Mac OS X โดยใช้Homebrew เมื่อติดตั้ง Homebrew คำสั่งคือbrew install dos2unixซึ่งใช้สูตรนี้
ตัวเลือกหนึ่งคือการใช้unix2dos(และdos2unixสำหรับการย้อนกลับ) ในบรรทัดคำสั่ง
อีกวิธีหนึ่งคือการใช้เท็กซ์เอดิเตอร์:
สำหรับ vi:: set ff = dos เพื่อตั้งค่าการสิ้นสุดบรรทัดให้เป็นการสิ้นสุดบรรทัดดอส
สำหรับ emacs: Cx [ENTER] f dos [ENTER]
สำหรับเครื่องมือแก้ไข GUI ที่คุณโปรดปราน (เช่น jedit) ฉันแนะนำให้ตรวจสอบคู่มือหรือ Google
สุดท้ายถ้าคุณไม่ต้องการจัดการกับ text editor และใช้มันกับยูทิลิตี้ทั่วไปและ (หรือไม่ได้ติดตั้ง unix2dos):
tr -d '\r' < infile > outfileที่จะไปจาก Windows -> Unix ที่
awk 'sub("$", "\r")' unixfile.txt > winfile.txtจะไปจาก Unix -> Windows ที่trไม่สามารถไปจาก Unix เป็น Windows
ff: :e ++ff=unix. อย่างน้อยก็เหมาะสมกับdos -> unixการเปลี่ยนใจเลื่อมใส
แก้ไขใน Vim และใช้set fileformatคำสั่ง
MS-DOS / Windows (ตัวแบ่ง CR + LF) เป็น * ระวัง (ตัวแบ่ง LF เท่านั้น)
:set fileformat=unix
:wq
* ระวังกับ MS-DOS / Windows
:set fileformat=dos
:wq
hexdump -C- และยังยืนยันว่าไม่เหนียวเหนอะ - ตั้งค่าต่อviเซสชัน
นี่คือสิ่งที่ฉันใช้คล้ายกับ Chealion เพื่อแปลง Windows เป็นจุดสิ้นสุดของบรรทัด Unix:
tr -d \\015 < windows > unix
การทำสิ่งนี้กับ POSIX นั้นยุ่งยาก:
POSIX Sedไม่สนับสนุนหรือ\r \15แม้ว่าจะเป็นเช่นนั้นตัวเลือก in place -iไม่ใช่ POSIX
POSIX Awkรองรับ\rและ\15อย่างไรก็ตาม-i inplaceตัวเลือกนี้ไม่ได้เป็น POSIX
d2uและdos2unixไม่ใช่POSIX ยูทิลิตี้แต่อดีตคือ
POSIX อดีตไม่สนับสนุน\r, \15, \nหรือ\12
หากต้องการลบการขึ้นบรรทัดใหม่:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file
ในการเพิ่มการขึ้นบรรทัดใหม่ให้ทำดังนี้
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
dos2unixคือwaterlan.home.xs4all.nl/dos2unix.htmlและทำงานได้ใน Windows เช่นกัน