Удаление новых строк Windows в Linux (sed и awk)

В некоторых файлах с разделителями неправильно размещены символы новой строки в середине полей (, а не в конце строки ), что отображается как ^M в Vim. Они происходят из freebcp (на Centos 6 )экспорта базы данных MSSQL. Сброс данных в шестнадцатеричном формате показывает \r\n шаблоны:

$ xxd test.txt | grep 0d0a
0000190: 3932 3139 322d 3239 3836 0d0a 0d0a 7c43

Я могу удалить их с помощью awk, но не могу сделать то же самое с помощью sed.

Это работает в awk, полностью удаляя разрывы строк:

awk 'gsub(/\r/,""){printf $0;next}{print}'

Но это в sed не работает, оставляя перевод строки на месте:

sed -i 's/\r//g'

где это, по-видимому, не имеет никакого эффекта:

sed -i 's/\r\n//g'

Использование ^M в выражении sed (ctrl+v, ctrl+m )также не работает.

Для такого рода задач проще использовать sed, но я работаю над тем, чтобы больше узнать об обоих. Я неправильно использую sed или есть ограничения?

29
задан kermatt 27 July 2012 в 02:51
поделиться