¿Cómo eliminar Ctrl-M de archivos donde dos2unix, perl, tr y sed no están presentes?

9

Suponga que está trabajando en un servidor UNIX muy antiguo, donde dos2unix, perl, tr, y sedno está presente. ¿Cómo se pueden convertir archivos de DOS a formato UNIX ?

Hemant
fuente
sed está permitido?
elmarco
@elmarco: no :(
Hemant
99
¿Qué edad debe tener un servidor Unix para no tener try sed? sedes viejo ........ iirc,
xenoterracide
1
¿Estaría exo edestaría disponible en un sistema como ese? No lo llamaría unix si no hay tro sed.
MattBianco
3
No sed? ¿¡De Verdad!? Fuera de interés, ¿cuál es el sistema? Como Gilles y MattBianco señalan, probablemente todavía tendría edal menos.
Mikel

Respuestas:

12

Creo que te estás refiriendo a eliminar el caret-M al final de las líneas. Puede usar buscar y reemplazar en vi para hacer esto.

En vi normalmente lo hago: (donde "^" representa CTRL):

:%s/^V^M//g

Que se muestra en la pantalla como:

:%s/^M//g
jjclarkson
fuente
gracias que funcionó :). Creo que es una solución muy portátil.
Hemant
44
También puede usar sed para hacer lo mismo sin tener que vim el archivo: sed -e '% s / ^ V ^ M // g' nombre de archivo Eso también se mostrará en la pantalla como sed e '% s / ^ M // g 'nombre de archivo En general, si puede buscarlo / reemplazarlo en vim, el comando es prácticamente el mismo en sed.
Gabe.
2
@gabe: la solución sed es en realidad aún más portátil +1 :)
wzzrd
@wzzrd, sedy viambos están especificados por POSIX , y ese vicomando no usa ninguna extensión de Vim.
Comodín
@jjclarkson, ¿qué significa ^Vy '^ M'?
cokedude
6

Un servidor sin tro sedtendría que ser realmente viejo, o faltan algunos comandos básicos. Ojalá edesté allí; existió en la primera edición de Unix .

ed /path/to/file
1,$s/^V^M$//
w
q

donde ^V^Msignifica escribir Ctrl+ Vluego Ctrl+ M(para ingresar un avance de línea literal). Si sabe que todas las líneas terminan en CR LF, puede usar 1,$s/.$//en su lugar (elimine indiscriminadamente el último carácter de cada línea).

Gilles 'SO- deja de ser malvado'
fuente