Я пытаюсь использовать что-то в bash, чтобы показать мне окончания строк в файле, напечатанном, а не интерпретированном. Файл представляет собой дамп из служб SSIS / SQL Server, который читается машиной Linux для обработки.
Существуют ли какие - либо переключатели в пределах
vi
,less
,more
и т.д.?Помимо просмотра концов строк, мне нужно знать, к какому типу конца строки это относится (
CRLF
илиLF
). Как мне это узнать?
linux
bash
command-line
newline
line-endings
Марко Чеппи
источник
источник
man less
.Ответы:
Вы можете использовать
file
утилиту, чтобы указать тип конца строки.Unix:
"DOS":
Чтобы конвертировать из "DOS" в Unix:
Чтобы конвертировать из Unix в "DOS":
Преобразование уже преобразованного файла не имеет никакого эффекта, поэтому его можно запускать вслепую (т. Е. Без предварительного тестирования формата), хотя обычные заявления об отказе применяются, как всегда.
источник
tofrodos
пакет сsudo apt-get install tofrodos
- так же, как вам нужно было бы запустить,sudo apt-get install dos2unix
чтобы получитьdos2unix
иunix2dos
.dos2unix
терпит неудачу в? ФП в этом вопросе лишь смутно описывает проблему.В
vi
...:set list
чтобы увидеть окончания строк.:set nolist
чтобы вернуться к нормальной жизни.Хотя я не думаю, что вы можете видеть
\n
или\r\n
внутриvi
, вы можете увидеть, какой тип файла (UNIX, DOS и т. Д.), Чтобы определить, какие окончания строк он имеет ...:set ff
В качестве альтернативы,
bash
вы можете использоватьod -t c <filename>
или простоod -c <filename>
для отображения результатов.источник
:set fileformat
сообщит, какой изunix
илиdos
vim считает, что в конце строки файла. Вы можете изменить его:set fileformat=unix
.od -t c file/path
, но спасибо за новую программу. Работал отлично!Ubuntu 14.04:
просто
cat -e <filename>
работает просто отлично.Здесь отображаются окончания строк Unix (
\n
или LF) как$
и окончания строк Windows (\r\n
или CRLF) как^M$
.источник
.txt
файла)В оболочке bash попробуйте
cat -v <filename>
. Это должно отобразить возврат каретки для файлов Windows.(Это работало для меня в rxvt через Cygwin на Windows XP).
Примечание редактора:
cat -v
визуализирует\r
(CR) символы. как^M
. Таким образом, конечные\r\n
последовательности будут отображаться как^M
в конце каждой выходной строки.cat -e
дополнительно визуализирую\n
, а именно как$
. (cat -et
дополнительно визуализирует символы табуляции. как^I
.)источник
echo -e 'abc\ndef\r\n' | cat -v
и вы должны увидеть^M
после "def".Чтобы показать CR как
^M
при меньшем использованииless -u
или набрать -uодин раз, открыта.man less
говорит:источник
Попробуйте
file
затемfile -k
затемdos2unix -ih
file
обычно будет достаточно. Но для тяжелых случаев попробуйтеfile -k
илиdosunix -ih
.Подробности ниже.
Пытаться
file -k
Краткая версия:
file -k somefile.txt
скажу вам.with CRLF line endings
для концов строк DOS / Windows.with LF line endings
для концов строки MAC.text
. (Так что, если он явно не упоминает какой-либо вид,line endings
то это неявно означает: «Концы строк CR» .)Длинную версию смотрите ниже.
Пример из реальной жизни: кодировка сертификата
Я иногда должен проверить это для файлов сертификата PEM.
Проблема с обычным
file
заключается в следующем: иногда он пытается быть слишком умным / слишком конкретным.Давайте попробуем небольшой тест: у меня есть несколько файлов. И один из этих файлов имеет разные окончания строк. Который из?
(Кстати: вот так выглядит один из моих типичных каталогов "работы с сертификатами".)
Давайте попробуем регулярно
file
:Да. Это не говорит мне об окончаниях строк. И я уже знал, что это сертификаты. Мне не нужно было «файл», чтобы сказать мне это.
Что еще можно попробовать?
Вы можете попробовать
dos2unix
с--info
переключателем, как это:Это говорит о том, что: yup, «0.example.end.cer» должен быть нечетным человеком. Но что за концы строк? Как вы знаете , выходной формат dos2unix наизусть? (Я не.)
Но, к счастью, есть опция
--keep-going
(или-k
для краткости)file
:Превосходно! Теперь мы знаем, что наш нечетный файл имеет
CRLF
окончания строки DOS ( ). (А у других файлов естьLF
окончания строк Unix ( ). Это не явно в этом выводе. Это неявно. Это просто способ, которымfile
ожидается «обычный» текстовый файл.)(Если вы хотите поделиться моей мнемоникой: «L» для «Linux» и «LF».)
Теперь давайте преобразуем преступника и попробуем еще раз:
Хорошо. Теперь все сертификаты имеют окончания Unix.
Пытаться
dos2unix -ih
Я не знал этого, когда писал пример выше, но:
На самом деле получается, что dos2unix выдаст вам строку заголовка, если вы будете использовать
-ih
(сокращение--info=h
) следующим образом:И еще один «настоящий» момент: формат заголовка действительно легко запомнить: вот две мнемоники:
дальнейшее чтение
man file
man dos2unix
источник
Accounts.java: Java source, ASCII text\012-
на Windows в MinTTYfile -k Accounts.java
внутри mintty, который поставляется с git-for-windows тоже, но моя версияgit version 2.21.0.windows.1
cat -e file_to_test
Вы можете использовать,
xxd
чтобы показать шестнадцатеричный дамп файла, и отыскать символы "0d0a" или "0a".Вы можете использовать,
cat -v <filename>
как подсказывает @warriorpostman.источник
Вы можете использовать команду
todos filename
для преобразования в окончания DOS иfromdos filename
в конец строки UNIX. Чтобы установить пакет в Ubuntu, введитеsudo apt-get install tofrodos
.источник
Вы можете использовать
vim -b filename
для редактирования файла в двоичном режиме, который будет показывать символы ^ M для возврата каретки, а новая строка указывает на наличие LF, указывая окончания строки Windows CRLF. Под LF я имею в виду,\n
а под CR я имею в виду\r
. Обратите внимание, что при использовании параметра -b файл всегда будет редактироваться в режиме UNIX по умолчанию, как указано[unix]
в строке состояния, что означает, что при добавлении новых строк они заканчиваются LF, а не CRLF. Если вы используете обычный vim без -b для файла с окончанием строки CRLF, вы должны увидеть[dos]
показанный в строке состояния, и вставленные строки будут иметь CRLF в качестве конца строки. Документация vim дляfileformats
настройки объясняет сложности.Кроме того, у меня недостаточно очков, чтобы комментировать ответ Notepad ++, но если вы используете Notepad ++ в Windows, используйте меню View / Show Symbol / Show End of Line для отображения CR и LF. В этом случае отображается LF, тогда как для vim LF указывается новой строкой.
источник
Я вывожу свой вывод в текстовый файл. Затем я открываю его в notepad ++, затем нажимаю кнопку «Показать все символы». Не очень элегантно, но это работает.
источник
Vim - всегда показывать переводы Windows как
^M
Если вы предпочитаете всегда видеть символы новой строки Windows в vim render as
^M
, вы можете добавить эту строку в ваш.vimrc
:Это заставит vim интерпретировать каждый файл, который вы открываете, как файл unix. Так как файлы Unix имеют
\n
символ новой строки, файл Windows с символом новой строки\r\n
будет по-прежнему отображаться правильно (благодаря\n
), но будет иметь^M
в конце файла (именно так vim отображает\r
символ).Vim - иногда показывать переводы Windows
Если вы хотите установить его отдельно для каждого файла, вы можете использовать его
:e ++ff=unix
при редактировании данного файла.Vim - всегда показывать тип файла (
unix
vsdos
)Если вы хотите в нижней строке Vim всегда отображать то , что FILETYPE вы редактируете (и вы не принудительно установить тип файла в UNIX) , вы можете добавить в ваш
statusline
сset statusline+=\ %{&fileencoding?&fileencoding:&encoding}
.Моя полная статусная строка представлена ниже. Просто добавь это к себе
.vimrc
.Это будет как
внизу вашего файла
Vim - иногда показывает тип файла (
unix
vsdos
)Если вы просто хотите посмотреть, какой тип файла у вас есть, вы можете использовать его
:set fileformat
(это не будет работать, если вы принудительно установите тип файла ). Он вернетсяunix
для файлов Unix иdos
для Windows.источник