Удалить возврат каретки в Unix - PullRequest
200 голосов
/ 29 апреля 2009

Какой самый простой способ удалить все возвраты каретки \r из файла в Unix?

Ответы [ 17 ]

242 голосов
/ 29 апреля 2009

Я предполагаю, что вы имеете в виду возврат каретки ( CR , "\r", 0x0d) на концах строк, а не просто вслепую в файле (вы может быть их в середине строки, насколько я знаю). Используя этот тестовый файл с CR только в конце первой строки:

$ cat infile
hello
goodbye

$ cat infile | od -c
0000000   h   e   l   l   o  \r  \n   g   o   o   d   b   y   e  \n
0000017

dos2unix - это путь, если он установлен в вашей системе:

$ cat infile | dos2unix -U | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

Если по какой-то причине dos2unix вам недоступен, то sed сделает это:

$ cat infile | sed 's/\r$//' | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

Если по какой-то причине sed вам недоступен, то ed сделает это сложным образом:

$ echo ',s/\r\n/\n/
> w !cat
> Q' | ed infile 2>/dev/null | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

Если у вас нет каких-либо этих инструментов, установленных на вашем компьютере, у вас есть большие проблемы, чем при попытке конвертировать файлы: -)

214 голосов
/ 29 апреля 2009
tr -d '\r' < infile > outfile

См. tr (1)

36 голосов
/ 29 апреля 2009

Старая школа:

tr -d '\r' < filewithcarriagereturns > filewithoutcarriagereturns
27 голосов
/ 29 апреля 2009

Существует утилита под названием dos2unix , которая существует во многих системах и может быть легко установлена ​​в большинстве.

24 голосов
/ 04 января 2017

Самый простой способ для Linux, по моему скромному мнению,

sed -i 's/\r$//g' <filename>

сильные кавычки вокруг оператора подстановки 's/\r//' необходимы . Без них оболочка будет интерпретировать \r как escape + r, уменьшать ее до простого значения r и удалять все строчные буквы r. Вот почему ответ, данный выше в 2009 году Робом , не работает.

А добавление модификатора /g обеспечивает удаление даже нескольких \r, а не только первого.

7 голосов
/ 29 апреля 2009

sed -i s/\r// <filename> или что-то подобное; см. man sed или обширную информацию, доступную в Интернете, относительно использования sed.

Одна вещь, на которую следует обратить внимание, это точное значение слова «возврат каретки» в приведенном выше; если вы действительно имеете в виду один управляющий символ «возврат каретки», то приведенная выше схема верна. Если вы имели в виду, в более общем смысле, CRLF (возврат каретки и перевод строки, то есть, как переводы строк реализованы в Windows), то вы, вероятно, захотите заменить \r\n вместо этого. Голые переводы строки (новая строка) в Linux / Unix \n.

6 голосов
/ 28 января 2016

Еще раз решение ... Потому что всегда есть еще одно:

perl -i -pe 's/\r//' filename

Это хорошо, потому что он работает и работает в каждом варианте Unix / Linux, с которым я работал.

6 голосов
/ 05 сентября 2012

Если вы являетесь пользователем Vi, вы можете открыть файл и удалить возврат каретки с помощью:

:%s/\r//g

или

:1,$ s/^M//

Обратите внимание, что вы должны набрать ^ M, нажав Ctrl-V, а затем Ctrl-M.

3 голосов
/ 23 июля 2015

Кто-то еще рекомендует dos2unix, и я настоятельно рекомендую это также. Я просто предоставляю более подробную информацию.

Если установлено, перейдите к следующему шагу. Если он еще не установлен, я бы рекомендовал установить его через yum, например:

yum install dos2unix

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

dos2unix fileIWantToRemoveWindowsReturnsFrom.txt
2 голосов
/ 17 декабря 2015

Вот вещь,

%0d - символ возврата каретки. Сделать его совместимым с Unix. Нам нужно использовать приведенную ниже команду.

dos2unix fileName.extension fileName.extension

...