Это, кажется, старый добрый символ перевода страницы, описанный в man ascii
как:
Oct Dec Hex Char
------------------------------------------
014 12 0C FF '\f' (form feed)
(Не упомянутый там, но ^L
код является теми же 12.)
Затем в bash
любой из них должен работать:
grep -v $'^\f' file
grep -v $'^\cL' file
grep -v $'\x0C' file
^M
символ возврата каретки. Если Вы видите это, Вы, вероятно, смотрите на файл, который произошел в мире DOS/Windows, где конец строки отмечен возвратом каретки / пара новой строки, тогда как в мире Unix, конец строки отмечен единственной новой строкой.
Прочитайте эту статью для большего количества детали и также статью в Википедии для новой строки.
Эта статья обсуждает, как настроить энергию для прозрачного редактирования файлов с различными маркерами конца строки.
Если у Вас есть файл с ^M
в конце некоторых строк и Вы хотите избавиться от них, использовать это в Vim:
:s/^M$//
(Нажмите Ctrl+V Ctrl+M для вставки этого ^M
.)
Большинству операционных систем UNIX назвали утилиту dos2unix
это преобразует CRLF в LF. Другие ответы касаются, "каковы они" вопрос.
Более простой способ сделать это должно использовать следующую команду:
dos2unix filename
Эта команда работает с шаблонами пути также, Например,
dos2unix path/name*
Если это не работает, попытайтесь использовать другой режим:
dos2unix -c mac filename
-c
Режим преобразования набора. Где CONVMODE является одним из: ascii, 7bit, iso, mac
с ascii
быть значением по умолчанию.Другой способ избавиться от возвратов каретки с tr
команда.
У меня есть маленький сценарий, которые похожи на это
#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"$1" >"$tmpfile"
mv "$tmpfile" "$1"
Можно очистить это с sed
:
sed -e 's/^M$//' < infile > outfile
Прием - то, как ввести возврат каретки правильно. Обычно необходимо ввести C-v C-m
ввести литеральный возврат каретки. Можно также иметь в распоряжении работу sed с
sed -i.bak -e 's/^M$//' infile
Что это за ^ M?
^ M - это символ возврата каретки. Если вы видите это, вы, вероятно, смотрите на файл, созданный в мире DOS / Windows, где конец строки отмечен парой возврата каретки / новой строки, тогда как в мире Unix конец строки отмечен одной новой строкой.
Как это могло быть там?
Когда есть изменение в формате файла.
Как мне от него избавиться?
откройте файл с помощью
vim -b FILE_PATH
сохраните его с помощью следующей команды
:%s/^M//g
Вы можете использовать Vim в режиме Ex:
ex -bsc '%s/\r//|x' file
-b
двоичном режиме
%
выберите все строки
s
подстановка
\r
возврат каретки
x
сохранить и закрыть
В моем случае
Ничего из вышеперечисленного не сработало, у меня был CSV-файл, скопированный на Linux-машину с моего Mac, и я использовал все вышеперечисленные команды, но ничего помогло, но приведенный ниже
tr "\015" "\n" < inputfile > outputfile
у меня был файл, в котором символы ^ M были зажаты между строками, как показано ниже
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
Это сработало для меня
:e ++ff=dos
Команда :e ++ff=dos говорит Vim прочитать файл еще раз, заставляя формат файла dos. Vim удалит CRLF и LF-окончания строк, оставив в буфере только текст каждой строки.
затем
:set ff=unix
и наконец
:wq
Раньше я видел, что даже файлы конфигурации не анализируются должным образом и жалуются на пробелы, но если вы воспользуетесь vi и сделаете список набора, это не будет отображать пробелы, grep filename [[пробел]] покажет вам ^ M
, когда файл dos2unix
поможет
Добавьте следующую строку в ваш ~/.vimrc
command! Tounix :call Preserve('1,$s/^M//')
Затем, когда у вас есть файл с окончаниями строк Windows, выполните команду «:Tounix».
Sed в -поместите решение без необходимости вводить специальный символ (вы можете скопировать это, и оно работает):
sed -i -e "s/\r//g" filename
Пояснение:
-i: in-place
-e: regular expression
\r: escaped carriage return
/g: replace globally
:%s/^M/\r/g
вместо этого удалить^M
и замена^M
с символом новой строки\r
. Без%
, команда запрашивает текущую строку только. И я столкнулся с некоторыми примерами где^M
не в конце строки, такой какThe first line.^MThe second line.
– George 14.04.2015, 07:29:%s/^M/
– carefulnow1 21.11.2016, 10:52^M
используется в UNIX – Vivex 16.02.2018, 09:23\n
используется в Unix, который корректен. Это - код ASCII10
, иначе известный как^J
. – larsks 16.02.2018, 23:05