Если я открываю файлы, созданные в Windows, все строки заканчиваются на ^M.
Как мне удалить этих персонажей сразу?
Если я открываю файлы, созданные в Windows, все строки заканчиваются на ^M.
Как мне удалить этих персонажей сразу?
Ответы:
dos2unix - это утилита командной строки, которая сделает это, или :%s/^M//g, если вы используете Ctrl-, v Ctrl- mдля ввода ^ M, или вы можете, :set ff=unixи vim сделает это за вас.
Документы по настройке 'fileformat' находятся здесь , и на vim wiki есть исчерпывающая страница о конверсиях, заканчивающихся строкой .
С другой стороны, если вы часто перемещаете файлы назад и вперед, вы, возможно, не захотите их преобразовывать, а скорее сделаете это :set ff=dos, поэтому vim будет знать, что это файл DOS, и будет использовать соглашения DOS для окончаний строк.
:%s/^M//gдолжно быть :%s/\r//g, потому что ^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
И вы можете использовать его из командной строки:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unixэто намного приятнее, чем большинство других вещей, написанных здесь, и скрипт bash является хорошим бонусом.
:eкоманды не появляются , чтобы сделать что - нибудь на моем Windows , VIM установки. Мой взгляд все еще показывает ^Mкоды.
Я обычно использую
:%s/\r/\r/g
который кажется немного странным, но работает из-за способа, которым vim соответствует переводам строки. Мне тоже легче запомнить :)
:set ff=unixраньше, но файл, который я открыл сегодня, должен быть особенно странным. Вим сказала, что это уже было, fileformat=unixно все окончания строки были ^M. Это решение сработало для меня.
:%s/\r//gвместо этого работает для меня.
:%s/\r//g- единственное решение общего назначения, особенно для файлов смешанного режима, содержащих неоднородную смесь строк перевода в стиле DOS и UNIX. Канонические решения (например, :set ff=unix, :e ++ff=unix) принимают на себя каждую строку конца текущего буфера в том же стиле новой строки. Иногда они делают; иногда они этого не делают. Кий грустный.
Я предпочитаю использовать следующую команду:
:set fileformat=unix
Вы также можете использовать macили dosдля преобразования вашего файла в формат Macintosh или MS-DOS / MS-Windows. И это ничего не делает, если файл уже в правильном формате.
Для получения дополнительной информации см. Справку vim:
:help fileformat
^Mсимволы.
set fileformat=unixв мой файл .vimrc сработало.
:set fileformat=unix конвертировать из DOS в Unix.
от: 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
Выше используется предполагаемая клавиатура США. Используйте -опцию 437 для использования клавиатуры Великобритании.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(см .: http://kb.iu.edu/data/acux.html )
Следующие шаги могут преобразовать формат файла для 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
Комментарий о появлении ^ 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
Ты можешь использовать:
vim somefile.txt +"%s/\r/\r/g" +wq
или dos2unix utility.
В vim введите:
:w !dos2unix %
Это передаст содержимое вашего текущего буфера в команду dos2unix и запишет результаты поверх текущего содержимого. Vim попросит перезагрузить файл после
Обычно есть 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 и при сохранении файла, который будет автоматически преобразован в Unix EOL
autocmd BufWrite * :set ff=unix
если вы создадите файл в NotePad или NotePad ++ в Windows и перенесете его в Linux и откроете его с помощью vim, вы увидите ^ M в конце каждой строки. Чтобы удалить это,
На вашем терминале Linux введите
dos2unix filename.ext
Это сделает необходимую магию.
Я хотел новые строки вместо ^ M. Perl на помощь:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Или написать в стандартный вывод:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfileи видите,0x0d 0x0a"\r\n"что это ваша проблема.