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