มีคำสั่ง Bash เพื่อแปลง \ r \ n เป็น \ n หรือไม่


19

มีคำสั่ง Bash เพื่อแปลง \ r \ n เป็น \ n หรือไม่

เมื่อฉันอัพโหลดสคริปต์ของฉันจาก Windows ไปยัง Linux ฉันต้องใช้ยูทิลิตี้เช่นนี้เพื่อทำให้งานต่างๆ


7
dos2unixโดยปกติจะมีให้ใช้เป็นอย่างอื่นsed -e 's/\r$//'
falstro

1
ไม่ไม่มีคำสั่ง Bash สำหรับสิ่งนั้น แต่มีdos2unixโปรแกรม Unix / Linux ที่จะทำสิ่งที่คุณต้องการ
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1
ทำไมคุณไม่ใช้ตัวแก้ไขข้อความที่มีเหตุผลซึ่งให้คุณเลือกสไตล์การขึ้นบรรทัดใหม่เมื่อบันทึกไฟล์
vtest

คำตอบ:


28

มี:

dos2unix

นี่คือคำตอบที่ถูกต้องในอดีตแม้ว่า dos2unix จะไม่สามารถใช้ได้ทุกวัน
Jared


5

ด้วย sed และพบว่าลงท้ายด้วย.txt, .php, .js, .css:

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")

5

มียูทิลิตี้ Unix ที่เรียกconvว่าสามารถแปลงการสิ้นสุดบรรทัด มันมักจะถูกเรียกด้วย Softlinks ไปu2dหรือd2uหรือหรือunix2dosdos2unix

นอกจากนี้ยังมีสาธารณูปโภคที่เรียกว่าและfromdostodos


2

ใช้ man 1 ed (ซึ่งแก้ไขไฟล์ในที่ที่ไม่มีการสำรองข้อมูลก่อนหน้า - ซึ่งแตกต่างจาก: sed .. -i ".bak" ... ):

ed -s file <<< $'H\ng/\r*$/s///\nwq'

ฉัน diden't ได้รู้ว่าเอ็ด แต่มันไม่ทำงาน (เก่า แต่ทอง)
dwana

คำสั่งนี้ใช้ได้กับฉันเมื่อไม่มีคำสั่งจากคำตอบอื่น ๆ บนโฮสติ้งที่ใช้ร่วมกันที่ฉันใช้ ขอบคุณ :)
FKasa

2

การทำสิ่งนี้กับ POSIX นั้นยุ่งยาก:

  • POSIX Sedไม่สนับสนุนหรือ\r \15แม้ว่าจะเป็นเช่นนั้นตัวเลือก in place -iไม่ใช่ POSIX

  • POSIX Awkรองรับ\rและ\15อย่างไรก็ตาม-i inplaceตัวเลือกนี้ไม่ได้เป็น POSIX

  • d2uและdos2unixไม่ใช่POSIX ยูทิลิตี้แต่อดีตคือ

  • POSIX อดีตไม่สนับสนุน\r, \15, \nหรือ\12

หากต้องการลบ carriage return:

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


0

$ recode dos .. ไฟล์
$ flip -u FILE

(แต่ละตัวมีอยู่สำหรับระบบที่ไม่ใช่ Ubuntu แต่ลิงค์เหล่านี้มีประโยชน์)

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