วิธีการแปลงตัวแบ่งบรรทัดในไฟล์ข้อความระหว่างรูปแบบ Windows และ Unix / Linux


33

ฉันจะแปลงตัวแบ่งบรรทัดในไฟล์ข้อความระหว่างรูปแบบ Windows และ Unix / Linux ได้อย่างไร

ฉันมีสภาพแวดล้อม * nix แต่ฉันต้องนำเข้าและส่งออกข้อมูลด้วยตัวแบ่งบรรทัดสไตล์ Windows ฉันคิดว่าจะมียูทิลิตี้มาตรฐานหรือคำสั่งให้ทำเช่นนี้ แต่ฉันไม่พบมัน

คำตอบ:


42

คุณอาจมองหาdos2unix, unix2dos, todosหรือfromdosขึ้นอยู่กับการกระจายของคุณ แพ็คเกจ Ubuntu / Debian todos/ fromdosเป็นส่วนหนึ่งของแพ็คเกจtofrodosจากหน่วยความจำ


4
ในกรณีที่ทุกคนเจอคำถามนี้ที่กำลังมองหาวิธีแก้ปัญหา Windows เว็บไซต์ต้นน้ำdos2unixคือwaterlan.home.xs4all.nl/dos2unix.htmlและทำงานได้ใน Windows เช่นกัน
womble

คุณสามารถติดตั้งdos2unix/unix2dosบน Mac OS X โดยใช้Homebrew เมื่อติดตั้ง Homebrew คำสั่งคือbrew install dos2unixซึ่งใช้สูตรนี้
Rory O'Kane

24

ตัวเลือกหนึ่งคือการใช้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


dos2unix ทำกลอุบาย แต่ขอบคุณสำหรับยูทิลิตี้ tr มันสามารถประหยัดเวลาได้มากในอดีต!
alexeit

หากไฟล์มีการลงท้ายด้วยเส้นผสมตรวจสอบให้แน่ใจว่าได้โหลดอย่างถูกต้องff: :e ++ff=unix. อย่างน้อยก็เหมาะสมกับdos -> unixการเปลี่ยนใจเลื่อมใส
x-yuri

ซับหนึ่งที่กำลังสอนคนตกปลาขอบคุณสำหรับสิ่งนั้น ฉันจะหิวน้อยลงในอนาคต
Gareth Davidson

13

แก้ไขใน Vim และใช้set fileformatคำสั่ง

  • MS-DOS / Windows (ตัวแบ่ง CR + LF) เป็น * ระวัง (ตัวแบ่ง LF เท่านั้น)

    :set fileformat=unix
    :wq
    
  • * ระวังกับ MS-DOS / Windows

    :set fileformat=dos
    :wq
    

ระวังเมื่อใช้ไฟล์นั้นหากยังไม่มีตัวแบ่งบรรทัดที่บรรทัดสุดท้าย เป็นกลุ่มจะเพิ่มหนึ่งเว้นแต่คุณจะรู้วิธีที่จะบอกไม่ได้
CesarB

หลังจากเวลาผ่านไปหลายชั่วโมงพยายามแก้ปัญหาอื่น ๆ ทั้งหมดนี่เป็นเครื่องช่วยชีวิตที่ฉันต้องการ พฤติกรรมที่ยืนยันใน OS X Yosemite ด้วยhexdump -C- และยังยืนยันว่าไม่เหนียวเหนอะ - ตั้งค่าต่อviเซสชัน
Techmag

8

นี่คือสิ่งที่ฉันใช้คล้ายกับ Chealion เพื่อแปลง Windows เป็นจุดสิ้นสุดของบรรทัด Unix:

tr -d \\015 < windows > unix

โปสเตอร์ต้องการให้ยูนิกซ์จบเส้นหน้าต่าง และคุณตอบช้าไปหลายปี
ott--

5
ใครจะสนใจว่าเป็น "ช่วงปลายปี" ใคร? มันยังใช้งานได้และยังใช้กับคำถามได้ ฉันแค่เพิ่มตัวเลือกอื่นสำหรับผู้อ่านที่เข้ามาเช่นเดียวกับตัวฉัน คำถามของเขาถาม Windows -> Unix และคำอธิบายของเขาถาม Unix -> Windows ยัก
Josh

ขวา. บางทีคุณอาจเพิ่มคำสั่ง tr อื่น ๆ สำหรับการแปลงยูนิกซ์เป็น windows
ott--

ฉันพยายามเลิกทำการ downvote แต่มันบอกว่ามันถูกล็อคจนกว่าบทความจะถูกแก้ไข
ott--

@ ott-- ไม่มีปัญหาฉัน upvoting สำหรับคุณ ... เดี๋ยวก่อนฉันไม่สามารถลงคะแนนให้ฉันได้! ... แดง ... :)
Alois Mahdal

1

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