Nếu tôi mở các tệp tôi đã tạo trong Windows, tất cả các dòng kết thúc bằng ^M
.
Làm cách nào để xóa tất cả các ký tự này cùng một lúc?
Nếu tôi mở các tệp tôi đã tạo trong Windows, tất cả các dòng kết thúc bằng ^M
.
Làm cách nào để xóa tất cả các ký tự này cùng một lúc?
Câu trả lời:
dos2unix là một tiện ích dòng lệnh sẽ làm điều này hoặc :%s/^M//g
sẽ nếu bạn sử dụng Ctrl- v Ctrl- mđể nhập ^ M, hoặc bạn có thể:set ff=unix
và vim sẽ làm điều đó cho bạn.
Tài liệu về cài đặt 'fileformat' ở đây và wiki vim có một trang toàn diện về chuyển đổi kết thúc dòng .
Thay vào đó, nếu bạn di chuyển các tệp qua lại nhiều, bạn có thể không muốn chuyển đổi chúng, nhưng thay vào đó :set ff=dos
, vim sẽ biết đó là tệp DOS và sử dụng các quy ước của DOS cho các kết thúc dòng.
:%s/^M//g
nên :%s/\r//g
, bởi vì ^M
chỉ có nghĩa là "khớp vốn" M "ở đầu dòng".
:%s/\r//g
hiệu quả với tôi, chúc mừng @Bunyk
set ff=unix
không làm gì cả. Có thể nó chuyển đổi tập tin, nhưng tất cả các ^M
nhân vật vẫn còn đó.
Thay đổi kết thúc dòng trong chế độ xem:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Điều này cũng có thể được sử dụng như lưu hoạt động (: w một mình sẽ không lưu bằng cách sử dụng các kết thúc dòng bạn thấy trên màn hình):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
Và bạn có thể sử dụng nó từ dòng lệnh:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unix
đẹp hơn rất nhiều so với hầu hết những thứ khác được viết ở đây, và kịch bản bash là một phần thưởng tuyệt vời.
:e
lệnh không xuất hiện để làm bất cứ điều gì trên cài đặt Windows vim của tôi. Quan điểm của tôi vẫn hiển thị các ^M
mã.
Tôi thường sử dụng
:%s/\r/\r/g
có vẻ hơi kỳ quặc, nhưng hoạt động vì cách mà vim khớp với các nguồn cấp dữ liệu. Tôi cũng thấy dễ nhớ hơn :)
:set ff=unix
trước đây, nhưng tập tin tôi mở hôm nay chắc chắn rất kỳ lạ. Vim nói rằng nó đã được fileformat=unix
nhưng tất cả các kết thúc dòng là ^M
. Giải pháp này đã làm việc cho tôi.
:%s/\r//g
thay vì làm việc cho tôi
:%s/\r//g
là giải pháp đa năng duy nhất - đặc biệt là đối với các tệp ở chế độ hỗn hợp có chứa một hỗn hợp không đồng nhất của cả hai dòng mới theo kiểu DOS và UNIX. Các giải pháp kinh điển (ví dụ :set ff=unix
, :e ++ff=unix
) giả định tất cả các dòng của bộ đệm đầu hiện nay theo phong cách xuống dòng tương tự. Đôi khi họ làm; đôi khi họ không. Cue mặt buồn.
Tôi thích sử dụng lệnh sau:
:set fileformat=unix
Bạn cũng có thể sử dụng mac
hoặcdos
chuyển đổi tương ứng tệp của mình sang quy ước tệp macffy hoặc MS-DOS / MS-Windows. Và nó không làm gì nếu tập tin đã ở đúng định dạng.
Để biết thêm thông tin, hãy xem trợ giúp vim:
:help fileformat
^M
ký tự trong đó.
set fileformat=unix
vào tập tin .vimrc của tôi đã làm việc.
:set fileformat=unix
để chuyển đổi từ dos sang unix.
từ: 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;
đồng thời, như đã đề cập ở trên ^ M = Ctrl+V+ Ctrl+M(không chỉ nhập ký hiệu "^" dấu mũ và M)
dos2unix
có thể trực tiếp sửa đổi nội dung tập tin.
Bạn có thể trực tiếp sử dụng nó trên tệp mà không cần chuyển hướng tệp tạm thời.
dos2unix input.txt input.txt
Ở trên sử dụng bàn phím giả định của Hoa Kỳ. Sử dụng -
tùy chọn 437 để sử dụng bàn phím Vương quốc Anh.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(xem: http://kb.iu.edu/data/acux.html )
Các bước sau đây có thể chuyển đổi định dạng tệp cho dos thành 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.
Tham khảo: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
Nhận xét về việc ^ M xuất hiện là những gì làm việc cho tôi. Chỉ cần gõ "^ M" trong vi của tôi không có gì (không tìm thấy). Các CTRL+ V CTRL+ Mchuỗi đã làm nó một cách hoàn hảo mặc dù.
Lệnh thay thế làm việc của tôi là
:%s/Ctrl-V Ctrl-M/\r/g
và nó trông như thế này trên màn hình của tôi:
:%s/^M/\r/g
:%s
thay vì :1,$s
. %
là tốc ký cho 1,$
.
Tôi tìm thấy một cách rất dễ dàng: Mở tệp bằng nano: nano file.txt
Nhấn CTRL+ Ođể lưu, nhưng trước khi nhấn Enter, hãy nhấn: ALT+ Dđể chuyển đổi các kết thúc dòng của DOS và Unix / Linux, hoặc: ALT+ Mđể chuyển đổi các kết thúc dòng Mac và Unix / Linux sau đó nhấn Enterđể lưu và CTRL+ Xđể thoát.
^M
kết thúc. lưu dưới dạng dos để giữ, lưu dưới dạng linux để loại bỏ. có thể kiểm tra bằng cách sử dụngcat -v
Bạn có thể dùng:
vim somefile.txt +"%s/\r/\r/g" +wq
hoặc dos2unix utility
.
Trong vim, gõ:
:w !dos2unix %
Điều này sẽ chuyển nội dung của bộ đệm hiện tại của bạn sang lệnh dos2unix và viết kết quả lên nội dung hiện tại. Vim sẽ yêu cầu tải lại tập tin sau
Thường có một dos2unix
lệnh bạn có thể sử dụng cho việc này, chỉ cần đảm bảo rằng bạn đọc hướng dẫn vì các phiên bản GNU và BSD khác nhau về cách chúng xử lý các đối số.
Phiên bản BSD:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
Phiên bản GNU:
dos2unix $FILENAME
Ngoài ra, bạn có thể tự tạo dos2unix
với bất kỳ câu trả lời được đề xuất nào ở đây, ví dụ:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Tôi biết tôi đã thấy điều này ở đâu đó. Đây là mẹo đăng nhập FreeBSD:
Cần xóa tất cả những ký tự ^ M khỏi tệp DOS? Thử
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
Mặc dù chủ đề này rất cũ, tôi muốn đặt một thứ khác từ wikia:
%s/\r\+$//g
mà điền tìm thấy tất cả các dấu hiệu trở lại vận chuyển (một và nhiều đại diện) cho đến cuối dòng và xóa, vì vậy \n
sẽ chỉ ở lại eol.
Đây là cách của tôi Tôi đã mở một tệp trong dos EOL và khi tôi lưu tệp sẽ tự động chuyển đổi thành unix EOL
autocmd BufWrite * :set ff=unix
Tôi muốn dòng mới thay cho ^ M's. Perl để giải cứu:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Hoặc để viết lên thiết bị xuất chuẩn:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfile
và thấy0x0d 0x0a
"\r\n"
đó là vấn đề của bạn.