มีคำสั่ง Bash เพื่อแปลง \ r \ n เป็น \ n หรือไม่
เมื่อฉันอัพโหลดสคริปต์ของฉันจาก Windows ไปยัง Linux ฉันต้องใช้ยูทิลิตี้เช่นนี้เพื่อทำให้งานต่างๆ
dos2unixโปรแกรม Unix / Linux ที่จะทำสิ่งที่คุณต้องการ
มีคำสั่ง Bash เพื่อแปลง \ r \ n เป็น \ n หรือไม่
เมื่อฉันอัพโหลดสคริปต์ของฉันจาก Windows ไปยัง Linux ฉันต้องใช้ยูทิลิตี้เช่นนี้เพื่อทำให้งานต่างๆ
dos2unixโปรแกรม Unix / Linux ที่จะทำสิ่งที่คุณต้องการ
คำตอบ:
Translate ( tr ) มีให้ใน Unixes ทั้งหมด:
tr -d '\r' # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.
\rเช่นกัน แม้ว่าพวกเขาจะผิดปกติอย่างมาก
ด้วย sed และพบว่าลงท้ายด้วย.txt, .php, .js, .css:
sed -rie 's/\r\n/\n/' \
$(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")
มียูทิลิตี้ Unix ที่เรียกconvว่าสามารถแปลงการสิ้นสุดบรรทัด มันมักจะถูกเรียกด้วย Softlinks ไปu2dหรือd2uหรือหรือunix2dosdos2unix
นอกจากนี้ยังมีสาธารณูปโภคที่เรียกว่าและfromdostodos
ใช้ man 1 ed (ซึ่งแก้ไขไฟล์ในที่ที่ไม่มีการสำรองข้อมูลก่อนหน้า - ซึ่งแตกต่างจาก: sed .. -i ".bak" ... ):
ed -s file <<< $'H\ng/\r*$/s///\nwq'
การทำสิ่งนี้กับ 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
dos2unixใช่การใช้งาน ตัวอย่างเช่น:
[justin@mybox ~]$ dos2unix myfile
dos2unixโดยปกติจะมีให้ใช้เป็นอย่างอื่นsed -e 's/\r$//'