ฉันจะแปลงตัวแบ่งบรรทัดในไฟล์ข้อความระหว่างรูปแบบ 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 เช่นกัน