Как удалить все CRLF в файле (не заменять LF)

Я хотел бы удалить все возвращаемые каретки, за которыми следуют строки (CRLF), такие как \r\n в файле. Как я могу это сделать? Я не могу использовать dos2unix потому что это заменяет CRLF на LF. И я не могу использовать tr потому что это также заменит любой \n которому не предшествует \r . Как я могу это сделать?

 sed ":a;/\r$/{N;s/\r\n//;ba}" 

Это будет соответствовать всем строкам, в конце которых '\r' (далее '\n' ). В этих строках он сначала добавит следующую строку ввода (при размещении разделителя '\n между ними), а затем заменив полученную "\r\n" пустой строкой, а затем вернемся к началу, чтобы увидеть, новое содержимое пространства шаблонов не случайно повторится.

Следуя за комментарием: если вы хотите также удалить любые дополнительные '\r' из файла, просто добавьте его после удаления списков CRLF:

 sed ":a;/\r$/{$!N;s/\r\n//;ta};s/\r//g" 

Я стараюсь использовать perl one-liners, когда делаю все, что связано с манипулированием окончаниями строк:

 perl -pe 'BEGIN {undef $/} s/\r\n//g' *.txt 

Ключом к выполнению этой работы является undef $/ , что заставляет Perl читать каждый файл как одну строку, после чего вы можете выполнять поиск и замену. Чтобы стричь голый \r , просто измените регулярное выражение:

 perl -pe 'BEGIN {undef $/} s/\r\n?//g' *.txt