Если я открываю файлы, созданные в Windows, все строки заканчиваются на ^M
.
Как удалить эти символы одновременно?
Преобразование окончаний строк DOS в окончание строк Linux в vim
Ответ 1
dos2unix - это утилита командной строки, которая сделает это, или :%s/^M//g
, если вы используете Ctrl - v Ctrl - m, чтобы ввести ^ M, или вы можете :set ff=unix
, и vim сделает это за вас.
Документы в настройке 'fileformat' здесь, а vim wiki имеет всеобъемлющий страница по завершению конвертации.
В качестве альтернативы, если вы много перемещаете файлы туда и обратно, вам может не захотеть их преобразовать, а сделать :set ff=dos
, поэтому vim будет знать это файл DOS и использовать соглашения DOS для окончаний строк.
Ответ 2
Измените вид в представлении:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Это также можно использовать в качестве операции сохранения (только: w не будет сохраняться с использованием выводов, отображаемых на экране):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
И вы можете использовать его из командной строки:
for file in $(ls *cpp)
do
vi +':w ++ff=unix' +':q' ${file}
done
Ответ 3
Обычно я использую
:%s/\r/\r/g
который кажется немного странным, но работает из-за того, как vim соответствует линейным переводам. Мне также легче запомнить:)
Ответ 4
Я предпочитаю использовать следующую команду:
:set fileformat=unix
Вы также можете использовать mac
или dos
для конвертации вашего файла в Macintosh или в соглашение о файлах MS-DOS/MS-Windows. И он ничего не делает, если файл уже находится в правильном формате.
Для получения дополнительной информации см. справку vim:
:help fileformat
Ответ 5
:%s/\r+//g
В Vim, который удаляет все возвраты каретки и оставляет только символы новой строки.
Ответ 6
:set fileformat=unix
для преобразования из dos в unix.
Ответ 7
from: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s/\ r $//
Ответ 8
dos2unix
может напрямую изменять содержимое файла.
Вы можете напрямую использовать его в файле, без необходимости перенаправления временных файлов.
dos2unix input.txt input.txt
В приведенном выше примере используется предполагаемая клавиатура США. Используйте опцию -
437 для использования британской клавиатуры.
dos2unix -437 input.txt input.txt
Ответ 9
Преобразование каталога файлов из dos в Unix
Используя командную строку и sed, найдите все файлы в текущем каталоге с расширением ".ext" и удалите все "^ M",
@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 (не просто набирайте символ "^" и "М")
Ответ 10
tr -d '\15\32' < winfile.txt > unixfile.txt
Ответ 11
С помощью следующей команды:
:%s/^M$//g
Получите ^M
чтобы отобразить тип Ctrl V, затем Ctrl M. Ctrl V говорит Vim, чтобы следующий символ был введен буквально.
Ответ 12
Следующие шаги могут преобразовать формат файла для 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
Ответ 13
:g/Ctrl-v Ctrl-m/s///
Ctrl M - символ \r
или возврат каретки, который добавляет конец строки DOS. Ctrl V сообщает vim вставить буквальный символ Ctrl M в командной строке.
Взятый в целом, эта команда заменяет все \r
ничем, удаляя их из концов строк.
Ответ 14
Комментарий о том, чтобы получить ^ М для отображения, - это то, что сработало для меня. Простое написание "^ M" в моей vi ничего не получилось (не найдено). Последовательность CTRL + V CTRL + M сделала это отлично.
Моя рабочая команда замены была
:1,$s/Ctrl-V Ctrl-M/\r/g
и это выглядело так на экране:
:1,$s/^M/\r/g
Ответ 15
Вы можете использовать:
vim somefile.txt +"%s/\r/\r/g" +wq
или dos2unix utility
.
Ответ 16
Вы можете использовать следующую команду: :%s/^V^M//g
где "^" означает использование клавиши CTRL.
Ответ 17
Я нашел очень простой способ: откройте файл с помощью nano: nano file.txt
Нажмите CTRL + O для сохранения, но перед нажатием Enter нажмите: ALT + D для переключения между линиями DOS и Unix/Linux или: ALT + M для переключения между линиями Mac и Unix/Linux, затем нажмите Enter для сохранения и CTRL + X, чтобы выйти.
Ответ 18
ниже команда используется для переформатирования всего файла .sh в текущем каталоге, я протестировал его на своей Fedora OS.
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
Ответ 19
Обычно существует команда 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}";
}
Ответ 20
Я знал, что видел это где-то. Вот подсказка для входа FreeBSD:
Нужно удалить все эти ^ M-символы из файла DOS? Попробуйте
tr -d \\r < dosfile > newfile
-- Originally by Dru <[email protected]>
Ответ 21
В vim введите:
:w !dos2unix %
Это будет передавать содержимое вашего текущего буфера команде dos2unix и записывать результаты по текущему содержимому. Vim попросит перезагрузить файл после
Ответ 22
Хотя эта тема очень старая, я хотел бы добавить еще один материал из wikia:
%s/\r\+$//g
чтобы заполнить все знаки возврата каретки (один и несколько повторений) до конца строки и удалить, поэтому просто \n
останется на уровне eol.
Ответ 23
Это мой путь. Я открыл файл в dos EOL, и когда я сохраню файл, который автоматически преобразуется в unix EOL
autocmd BufWrite * :set ff=unix
Ответ 24
Мне нужны новые строки вместо M. Perl для спасения:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Или записать в stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
Ответ 25
если вы создаете файл в NotePad или NotePad ++ в Windows и переносите его в Linux и открываете его с помощью vim, вы увидите ^ M в конце каждой строки. Чтобы удалить это,
На вашем Linux-терминале введите
dos2unix filename.ext
Это сделает требуемую магию.