Удаление возврата каретки в Mac OS X с помощью sed
В Linux для удаления возврата каретки мы можем выполнить:
sed -i 's/\r//g' <file>
Но то же самое не будет работать в Mac OS X. Необходимо добавить $ как:
sed -i $'s/\r//' <file>
И "g" также не требуется.
Почему это так?
Ответ 1
Это потому, что sed, доступный в OSX, не распознает \r как специальный символ, в отличие от sed в Linux.
Вы можете использовать его так, как вы используете:
sed -i.bak $'s/\r//' file
ИЛИ это:
sed -i.bak "s/$(printf '\r')//" file
ИЛИ иначе вы можете использовать tr в OSX:
tr -d '\r' < file
Ответ 2
Другим портативным и гибким решением является:
sed -i.bak $'s/\x0D//' file
Поскольку символ возврата имеет код ASCII 0D.\x заменяет работу для всех выпусков POSIX sed, и вы можете сопоставить любой другой неприятный символ, просмотрев код ASCII. См.: re_format (7),
Таблица ASCII