it-swarm-ru.tech

Конвертируйте окончания строки DOS в окончания строки Linux в vim

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

652
Bert Hekman

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

Документы по настройке 'fileformat' здесь , а вики-сайт vim содержит исчерпывающую страница с конверсиями в конце строки .

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

995
pjz

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

: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
250
Ludvig A. Norin

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

:%s/\r/\r/g

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

154
t-dub

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

:set fileformat=unix

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

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

:help fileformat
79
Sylvain Defresne
:%s/\r+//g

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

19
mercutio

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

16
Martin Sjögren
13
Alex Gartrell

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

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

dos2unix input.txt input.txt

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

dos2unix -437 input.txt input.txt
9
Venkataramesh Kommoju

Конвертировать каталог файлов из DOS в Unix

Используя командную строку и sed, найдите все файлы в текущем каталоге с расширением ".ext" и удалите все "^ M"

@ https://Gist.github.com/sparkida/777317

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

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

7
Sparkida
tr -d '\15\32' < winfile.txt > unixfile.txt

(см .: http://kb.iu.edu/data/acux.html )

6
MichaelD

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

:%s/^M$//g 

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

5
Dave Webb

Следующие шаги могут преобразовать формат файла для 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

5
ajitomatix

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

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

или dos2unix utility.

4
Christy Wald
:g/Ctrl-v Ctrl-m/s///

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

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

4
Rob Wells

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

Моя рабочая команда замещения была

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

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

:%s/^M/\r/g
4
Dannid

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

Нажмите CTRL+O сохранить, но перед нажатием Enter, Нажмите: ALT+D для переключения между окончаниями строк DOS и Unix/Linux, или: ALT+M для переключения между окончаниями строк Mac и Unix/Linux, затем нажмите Enter сохранить и CTRL+X выйти.

4
Stefan Sjöberg

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

3
JayG

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

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

Я знал, что видел это где-то. Вот совет по входу в FreeBSD:

Нужно удалить все эти символы ^ M из файла DOS? Пытаться

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>
1
Albaro Pereyra

Обычно есть команда 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}";
}
1
dsm

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

1
CBuzatu

В vim введите:

:w !dos2unix %

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

1
Tallak Tveide

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

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

dos2unix filename.ext

Это сделает необходимую магию.

0
Santle Camilus

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

%s/\r\+$//g

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

0
loadaverage

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

autocmd BufWrite * :set ff=unix
0
Thomas PABST

Я хотел переводы строк вместо ^ M. Perl на помощь:

Perl -pi.bak -e 's/\x0d/\n/g' Excel_created.txt

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

Perl -p -e 's/\x0d/\n/g' < Excel_created.txt
0
user3379574