ถ้าผมเปิดไฟล์ฉันสร้างขึ้นใน Windows ^M
เส้นสิ้นทั้งหมดที่มี
ฉันจะลบตัวละครเหล่านี้ทั้งหมดในครั้งเดียวได้อย่างไร
ถ้าผมเปิดไฟล์ฉันสร้างขึ้นใน Windows ^M
เส้นสิ้นทั้งหมดที่มี
ฉันจะลบตัวละครเหล่านี้ทั้งหมดในครั้งเดียวได้อย่างไร
คำตอบ:
dos2unixเป็นอรรถประโยชน์บรรทัดคำสั่งที่จะทำเช่นนี้หรือ:%s/^M//g
จะถ้าคุณใช้Ctrl- v Ctrl- mเพื่อป้อน ^ M หรือคุณสามารถ:set ff=unix
และเป็นกลุ่มจะทำเพื่อคุณ
เอกสารที่ 'fileformat' ตั้งอยู่ที่นี่และเป็นกลุ่มวิกิพีเดียมีครอบคลุมหน้าแปลงสายสิ้นสุด
อีกทางเลือกหนึ่งถ้าคุณย้ายไฟล์ไปมาบ่อยครั้งคุณอาจไม่ต้องการแปลงไฟล์ แต่ควรทำเช่น:set ff=dos
นั้นดังนั้นกลุ่มจะรู้ว่ามันเป็นไฟล์ DOS และใช้การประชุม DOS สำหรับการสิ้นสุดบรรทัด
:%s/^M//g
ควรเป็น:%s/\r//g
เพราะ^M
หมายถึง "จับคู่เงินทุน" M "ที่จุดเริ่มต้นของบรรทัด"
:%s/\r//g
ทำงานให้ฉันไชโย @Bunyk
set ff=unix
ไม่ทำอะไรเลย อาจจะแปลงไฟล์ แต่^M
ตัวละครทั้งหมดยังคงอยู่ที่นั่น
เปลี่ยนการสิ้นสุดบรรทัดในมุมมอง:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
นอกจากนี้ยังสามารถใช้เป็นการดำเนินการบันทึก (: w เพียงอย่างเดียวจะไม่บันทึกโดยใช้จุดสิ้นสุดบรรทัดที่คุณเห็นบนหน้าจอ):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
และคุณสามารถใช้มันจาก command-line:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unix
ดีกว่าสิ่งอื่น ๆ ส่วนใหญ่ที่เขียนไว้ที่นี่และสคริปต์ทุบตีเป็นโบนัสที่ดี
:e
คำสั่งดูเหมือนจะไม่ได้ทำอะไรบน Windows ของฉันเป็นกลุ่มติดตั้ง มุมมองของฉันยังคงแสดง^M
รหัส
ฉันมักจะใช้
:%s/\r/\r/g
ซึ่งดูเหมือนว่าแปลก ๆ แต่ทำงานได้เนื่องจากวิธีที่กลุ่มจับคู่ฟีดฟีด ฉันยังจำได้ง่ายขึ้น :)
:set ff=unix
มาก่อน แต่ไฟล์ที่ฉันเปิดในวันนี้จะต้องแปลกโดยเฉพาะ ที่เป็นกลุ่มบอกว่ามันเป็นอยู่แล้วแต่ทั้งหมดที่ปลายสายได้fileformat=unix
^M
วิธีนี้ใช้ได้ผลสำหรับฉัน
:%s/\r//g
ทำงานแทนฉัน
:%s/\r//g
เป็นทางออกทั่วไปเพียงอย่างเดียว - โดยเฉพาะอย่างยิ่งสำหรับไฟล์แบบผสมที่มีส่วนผสมที่ต่างกันของการขึ้นบรรทัดใหม่สไตล์ DOS และ UNIX โซลูชั่นที่ยอมรับ (เช่น:set ff=unix
, :e ++ff=unix
) ถือว่าสายของบัฟเฟอร์ปลายปัจจุบันทุกคนในรูปแบบเดียวกันขึ้นบรรทัดใหม่ บางครั้งพวกเขาทำ; บางครั้งพวกเขาทำไม่ได้ คิว sadface
ฉันชอบที่จะใช้คำสั่งต่อไปนี้:
:set fileformat=unix
นอกจากนี้คุณยังสามารถใช้mac
หรือdos
แปลงไฟล์ของคุณเป็นแบบ Macintosh หรือ MS-DOS / MS-Windows และจะไม่ทำอะไรเลยหากไฟล์นั้นมีรูปแบบที่ถูกต้องอยู่แล้ว
สำหรับข้อมูลเพิ่มเติมดูวิธีใช้กลุ่ม:
:help fileformat
^M
ตัวอักษรอยู่ในนั้น
set fileformat=unix
ไฟล์. vimrc ของฉันทำงานได้
:set fileformat=unix
การแปลงจาก dos เป็นยูนิกซ์
จาก: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
ตามที่กล่าวไว้ข้างต้น^ M = Ctrl+V+ Ctrl+M(ไม่เพียงพิมพ์เครื่องหมายคาเร็ต "^" และ M)
dos2unix
สามารถแก้ไขเนื้อหาไฟล์ได้โดยตรง
คุณสามารถใช้งานได้โดยตรงบนไฟล์โดยไม่จำเป็นต้องเปลี่ยนเส้นทางไฟล์ชั่วคราว
dos2unix input.txt input.txt
ด้านบนใช้คีย์บอร์ด US ที่สมมติขึ้น ใช้-
ตัวเลือก 437 เพื่อใช้แป้นพิมพ์ UK
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
ขั้นตอนต่อไปนี้สามารถแปลงรูปแบบไฟล์สำหรับ dos เป็น unix:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
การอ้างอิง: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
ด้วยคำสั่งดังต่อไปนี้:
:%s/^M$//g
รับ^M
ที่จะปรากฏประเภทแล้ว CtrlV บอกให้ Vim นำตัวอักษรถัดไปที่ป้อนเข้ามาCtrlMCtrlV
ความคิดเห็นเกี่ยวกับการทำให้ ^ M ปรากฏเป็นสิ่งที่ใช้ได้ผลสำหรับฉัน เพียงพิมพ์ "^ M" ใน vi ของฉันไม่มีอะไรเลย (ไม่พบ) CTRL+ V CTRL+ Mลำดับได้อย่างสมบูรณ์แม้ว่า
คำสั่งทดแทนการทำงานของฉันคือ
:%s/Ctrl-V Ctrl-M/\r/g
และดูเหมือนว่าสิ่งนี้บนหน้าจอของฉัน:
:%s/^M/\r/g
:%s
เป็นชวเลข :1,$s
%
1,$
ฉันพบวิธีที่ง่ายมาก: เปิดไฟล์ด้วย nano: nano file.txt
กดCTRL+ Oเพื่อบันทึก แต่ก่อนที่จะกดEnterให้กด: ALT+ Dเพื่อสลับระหว่างปลายสาย DOS และ Unix / Linux หรือ: ALT+ Mเพื่อสลับระหว่างปลายสาย Mac และ Unix / Linux จากนั้นกดEnterเพื่อบันทึกและCTRL+ Xเพื่อออกจาก
^M
จบแล้ว บันทึกเป็น dos เพื่อเก็บบันทึกเป็น linux เพื่อลบ สามารถตรวจสอบการใช้cat -v
:g/Ctrl-v Ctrl-m/s///
CtrlMคืออักขระ\r
หรือการขึ้นบรรทัดใหม่ซึ่งจบบรรทัดของ DOS เพิ่ม CtrlVบอกให้เป็นกลุ่มเพื่อแทรกตัวCtrlMอักษรที่บรรทัดคำสั่ง
โดยรวมแล้วคำสั่งนี้จะแทนที่ทั้งหมด\r
โดยไม่มีอะไรเลยลบออกจากปลายบรรทัด
คุณสามารถใช้ได้:
vim somefile.txt +"%s/\r/\r/g" +wq
dos2unix utility
หรือ
คุณสามารถใช้คำสั่งต่อไปนี้:
:%s/^V^M//g
'^' หมายถึงการใช้CTRLคีย์
คำสั่งด้านล่างใช้สำหรับฟอร์แมตไฟล์. sh ทั้งหมดในไดเรกทอรีปัจจุบันฉันทดสอบกับ Fedora OS
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
ในกลุ่มให้พิมพ์:
:w !dos2unix %
สิ่งนี้จะไพพ์เนื้อหาของบัฟเฟอร์ปัจจุบันของคุณไปยังคำสั่ง dos2unix และเขียนผลลัพธ์ผ่านเนื้อหาปัจจุบัน กลุ่มจะขอให้โหลดไฟล์ใหม่หลังจากนั้น
ในการรันโดยตรงไปยังคอนโซล linux:
vim file.txt +"set ff=unix" +wq
โดยปกติจะมีdos2unix
คำสั่งที่คุณสามารถใช้สำหรับเรื่องนี้เพียงให้แน่ใจว่าคุณอ่านคู่มือในขณะที่รุ่น GNU และ BSD แตกต่างกันเกี่ยวกับวิธีที่พวกเขาจัดการกับข้อโต้แย้ง
รุ่น BSD:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
รุ่น GNU:
dos2unix $FILENAME
หรือคุณสามารถสร้างของคุณเองdos2unix
ด้วยคำตอบที่เสนอใด ๆ ที่นี่ตัวอย่างเช่น:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
ฉันรู้ว่าฉันเห็นสิ่งนี้ที่ไหนสักแห่ง นี่คือเคล็ดลับการเข้าสู่ระบบ FreeBSD:
ต้องการลบอักขระ ^ M ทั้งหมดจากไฟล์ DOS หรือไม่ ลอง
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
แม้ว่าหัวข้อนี้จะเก่ามาก แต่ฉันต้องการนำสิ่งอื่นจากวิกิ:
%s/\r\+$//g
ที่เติมค้นหาสัญญาณการขึ้นบรรทัดใหม่ทั้งหมด (หนึ่งครั้งขึ้นไป) จนจบบรรทัดและลบดังนั้น\n
จะอยู่ที่ eol
นี่คือวิธีของฉัน ฉันเปิดไฟล์ใน dos EOL และเมื่อฉันบันทึกไฟล์ที่จะแปลงเป็นยูนิกซ์ EOL โดยอัตโนมัติ
autocmd BufWrite * :set ff=unix
หากคุณสร้างไฟล์ใน NotePad หรือ NotePad ++ ใน windows และนำไปที่ Linux และเปิดโดย vim คุณจะเห็น ^ M ที่ท้ายบรรทัดแต่ละบรรทัด หากต้องการลบสิ่งนี้
ที่ terminal Linux ของคุณพิมพ์
ชื่อไฟล์ dos2unix.ext
สิ่งนี้จะทำเวทย์มนตร์ที่จำเป็น
ฉันต้องการบรรทัดใหม่แทน ^ M's Perl เพื่อช่วยเหลือ:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
หรือเขียนถึง stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfile
และเห็น0x0d 0x0a
"\r\n"
ว่าเป็นปัญหาของคุณ