Вопрос

Если я открываю файлы, созданные мной в Windows, все строки заканчиваются на ^M.
Как мне удалить все эти символы сразу?

Это было полезно?

Решение

dos2unix есть ли утилита командной строки, которая будет это делать, или :%s/^M//g будет, если вы используете Ctrl-v Ctrl-m чтобы ввести ^ M, или вы можете :set ff=unix и vim сделает это за вас.

Документы по настройке "формат файла" следующие здесь, а в vim wiki есть всеобъемлющая конверсии, заканчивающиеся на странице в строке.

С другой стороны, если вы часто перемещаете файлы взад и вперед, возможно, вам захочется не конвертировать их, а выполнять :set ff=dos, таким образом, vim будет знать, что это файл DOS, и использовать соглашения DOS для окончаний строк.

Другие советы

Измените окончания строк в представлении:

: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

Обычно я использую

:%s/\r/\r/g

что кажется немного странным, но работает из-за того, как vim сопоставляет переводы строк.Мне также кажется, что это легче запомнить :)

Я предпочитаю использовать следующую команду :

:set fileformat=unix

Вы также можете использовать mac или dos чтобы соответственно преобразовать ваш файл в файловое соглашение macintosh или MS-DOS / MS-Windows.И это ничего не дает, если файл уже находится в правильном формате.

Для получения дополнительной информации обратитесь к справке vim :

:help fileformat
:%s/\r+//g

В Vim это удаляет все возвраты каретки и оставляет только новые строки.

:set fileformat=unix для преобразования из dos в unix.

dos2unix может напрямую изменять содержимое файла.

Вы можете использовать его непосредственно в файле, без необходимости временного перенаправления файла.

dos2unix input.txt input.txt

В приведенном выше примере используется предполагаемая американская клавиатура.Используйте -437 возможность использования британской клавиатуры.

dos2unix -437 input.txt input.txt

Преобразование каталога файлов из 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;

кроме того, как упоминалось выше = Ctrl+V + Ctrl+M (не вводите просто символ каретки "^" и M)

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

С помощью следующей команды:

:%s/^M$//g 

Получить ^M чтобы появиться, введите CtrlV тогда CtrlM. CtrlV указывает Vim воспринимать следующий введенный символ буквально.

Я нашел очень простой способ:Откройте файл с помощью nano: nano file.txt

Пресса CTRL+O для сохранения, но перед нажатием Войти, нажать: АЛЬТ+D для переключения между окончаниями строк DOS и Unix/ Linux или: АЛЬТ+M чтобы переключаться между окончаниями строк Mac и Unix / Linux, нажмите Войти чтобы сохранить и CTRL+X чтобы уволиться.

:g/Ctrl-v Ctrl-m/s///

CtrlM это персонаж \r, или возврат каретки, который добавляют окончания строк DOS. CtrlV указывает vim вставить литерал CtrlM символ в командной строке.

Взятая в целом, эта команда заменяет все \r ни с чем, удаляя их с концов строк.

Вы можете использовать:

vim somefile.txt +"%s/\r/\r/g" +wq

или dos2unix utility .

Комментарий о появлении ^ M - это то, что сработало для меня.Просто набрав "^ M" в моем vi, я ничего не получил (не найден).Тот Самый CTRL+V CTRL+M тем не менее, sequence сделала это идеально.

Моей рабочей командой замены было

:%s/Ctrl-V Ctrl-M/\r/g

и на моем экране это выглядело примерно так:

:%s/^M/\r/g

Вы можете использовать следующую команду:
:%s/^V^M//g
где '^' означает использовать CTRL Клавиша.

приведенная ниже команда используется для переформатирования всего .файл sh в текущем каталоге, я протестировал его на своей ОС Fedora.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

Обычно существует 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>

В vim введите:

:w !dos2unix %

Это передаст содержимое вашего текущего буфера команде dos2unix и запишет результаты поверх текущего содержимого.Vim попросит перезагрузить файл после

Для запуска непосредственно в консоли Linux:vim file.txt +"set ff=unix" +wq

Хотя эта тема очень старая, я бы хотел добавить еще один материал из wikia:

%s/\r\+$//g

эта заливка находит все знаки возврата каретки (одно и более повторений) до конца строки и удаляет, поэтому просто \n остановлюсь в eol.

Это мой путь.Я открыл файл в dos EOL, и когда я сохраню файл, он автоматически преобразуется в unix EOL

autocmd BufWrite * :set ff=unix

если вы создадите файл в NotePad или NotePad ++ в Windows, перенесете его в Linux и откроете с помощью vim, вы увидите ^ M в конце каждой строки.Чтобы удалить это,

На вашем терминале Linux введите

имя файла dos2unix.ext

Это произведет требуемое волшебство.

Я хотел, чтобы вместо букв ^M были новые строки.Perl спешит на помощь:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

Или написать в стандартный вывод:

perl -p -e 's/\x0d/\n/g' < excel_created.txt
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top