Я использую Linux. Где-то спрятано ^ M (возвращение кариеса Windows) где-то в тысячах файлов конфигурации, и я должен найти его, потому что это приводит к сбою сервера.
Как найти ^ M среди иерархии каталогов, полной конфигурационных файлов?
Я думаю, что я не могу ввести ^ M в командной строке bash. Но у меня есть это в текстовом файле, который я назвал m.txt
Ответы:
Используется
-r
для рекурсивного поиска и$''
для выхода в стиле c в Bash.Более того, если вы уверены, что это текстовый файл, то он должен быть безопасным для запуска
удалить все
\r
в файле.Если вы используете GNU
sed
,-i
можете выполнять редактирование на месте, поэтому вам не нужно писать обратно:источник
$'\r'
.$'
прочитал первый хит на man-страницеbash(1)
, в основном, вы можете видеть это так, как если бы вы писали буквенную строку C. Что касаетсяcommand < filename
использования<
или>
называется перенаправлением , я впервые увидел, что кто-то назвал это более выражением . ПоискREDIRECTION
вbash(1)
.Когда я пытался, я мог сказать, что это вроде как работает, но строки печатались пустыми. Добавьте в опцию:
Если у вас возникла эта проблема, я думаю, что это экранирующие символы для выделения цвета, мешающие
\r
персонажу.источник
Если на вашем сервере нет оболочки bash, альтернативой является использование
-f
опции ongrep
в сочетании с подготовленным файлом, содержащим\r
.Чтобы создать файл:
На самом деле сделать поиск
или вы можете быть немного ленивым и просто набрать *,
Вариант на используется , чтобы указать файл, содержащий шаблоны , чтобы соответствовать, по одному в каждой строке. В этом случае есть только один шаблон.
-f filename
grep
источник
Если я правильно понимаю ваш вопрос, то вы действительно хотите нормализовать все окончания строк в стандарте Unix LF (
\x0a
). Это не то же самое, что просто слепое удаление CR (\x0d
).Если у вас есть несколько файлов Mac, которые используют только CR для перевода строки, вы уничтожите эти файлы. (Да, Mac должны использовать LF почти 20 лет, но все еще (в 2019 году) есть много приложений Mac, которые используют только CR).
Вы можете использовать перевод
\R
строки Perl для замены любого вида новой строки\n
.Это заменит на месте любой перевод строки на
\n
in$your_file
, сохраняя резервную копию исходного файла в${your_file}.bak
.источник
Чтобы использовать grep для символов конца строки, я думаю, вы должны указать grep, что файл является двоичным.
-l (буква L) предназначена для печати только имени файла
-P для регулярного выражения perl (поэтому \ x0d преобразуется в \ r или ^ M)
источник
Если вы работаете на Mac и используете homebrew , вы можете сделать:
удалить все возвраты каретки Windows из файла file.txt
Чтобы вернуться к возврату каретки Windows,
источник
В стиле регулярных выражений, различные новые строки:
Windows (CR LF)
\r\n
Unix (LF)
\n
Так как
\r\n
последовательность довольно уникальна, я думаю, вы сможете найти ее таким образом?Что еще хуже, на Маках раньше был символ «\ r» вместо новой строки. Я не могу проверить это, но я не думаю, что поколения MacOSX делают это больше.
Старые Маки (CR)
\r
источник
grep "\r\n" *
ничего не дает. Нет результата ни за ,egrep -e "\r\n" *
ниgrep -E "\r\n" *
\r
мой плохой. Полный перевод строки действительно\r\n
или CRLFСледуя предыдущим ответам, метод 'tr' хорош:
533 $ if [[-n "
tr -cd "\r" <~/.bashrc
"]]; затем эхо "DOS"; еще эхо "UNIX"; фиUNIX
534 $ if [[-n "
tr -cd "\r" <dosfile.txt
"]]; затем эхо "DOS"; еще эхо "UNIX"; фиDOS
источник