Solución:
Es porque sed
disponible en OSX no reconoce r
como un carácter especial a diferencia del sed
en Linux lo hace.
Puede usarlo de la forma en que lo está usando:
sed -i.bak $'s/r//' file
O esto:
sed -i.bak "s/$(printf 'r')//" file
O bien puedes usar tr
en OSX:
tr -d 'r' < file
Otra solución portátil y flexible es:
sed -i.bak $'s/x0D//' file
Porque el carácter de retorno tiene el código ASCII 0D. Las sustituciones x funcionan para todas las versiones POSIX de sed, y puede hacer coincidir cualquier otro carácter problemático buscando el código ASCII. Para encontrar otras sustituciones válidas, ejecute man re_format
o ver una tabla ASCII.
La / g final es necesaria para Linux porque el retorno de carro ( r) no finaliza la línea. Muchos editores de “texto sin formato” de Windows (por ejemplo, el Bloc de notas) terminan cada línea con un retorno de carro y una nueva línea ( r n), pero los Mac con OS 9 (ca. 2001) o anteriores terminaron cada línea de un archivo de “texto sin formato” con un solo r. Si está limpiando un archivo de Windows, la / g no es necesaria en ningún sistema * X. Si está en macOS, tampoco es necesario / g, porque macOS reconoce el único r como un final de línea.
(Un sistema Linux que lea un archivo Mac antiguo pensará que todo el texto está en una línea muy larga y solo convertirá la primera r. Si está en un sistema Linux y necesita conservar los saltos de línea de un archivo Mac antiguo,
sed -i.bak $'s/x0D/x0A/g' file
convierte cada r en n.)