В некоторых файлах с разделителями неправильно размещены символы новой строки в середине полей (, а не в конце строки ), что отображается как ^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 или есть ограничения?