Если я открываю файлы, созданные в 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"
что это ваша проблема.