Comment supprimer Ctrl-M des fichiers où dos2unix, perl, tr et sed ne sont pas présents?

9

Supposons que vous travaillez sur un serveur unix très ancien où dos2unix, perl, tret sedne sont pas présents. Comment pouvez-vous convertir des fichiers de dos au format Unix ?

Hemant
la source
sed est autorisé?
elmarco
@elmarco: no :(
Hemant
9
Quel âge doit avoir un serveur Unix pour ne pas avoir tret sed? sedest vieux ........ iirc,
xenoterracide
1
Serait exou edserait disponible sur un système comme celui-là? Je ne l'appellerais pas unix s'il n'y a pas de trou sed.
MattBianco
3
Non sed? Vraiment!? Par intérêt, quel est le système? Comme le soulignent Gilles et MattBianco, il en aurait probablement encore edau moins.
Mikel

Réponses:

12

Je pense que vous faites référence à la suppression du caret-M à la fin des lignes. Vous pouvez utiliser la recherche et le remplacement dans vi pour ce faire.

Dans vi, je fais normalement: (où "^" représente CTRL):

:%s/^V^M//g

Qui s'affiche à l'écran comme:

:%s/^M//g
jjclarkson
la source
merci qui a fonctionné :). Je pense que c'est une solution très portable.
Hemant
4
Vous pouvez également utiliser sed pour faire la même chose sans avoir à créer le fichier: sed -e '% s / ^ V ^ M // g' filename Cela s'affichera également à l'écran sous la forme sed e '% s / ^ M // g 'filename En général, si vous pouvez le rechercher / le remplacer dans vim, la commande est pratiquement la même dans sed.
gabe.
2
@gabe: la solution sed est en fait encore plus portable +1 :)
wzzrd
@wzzrd, sedet visont tous deux spécifiés par POSIX , et cette vicommande n'utilise aucune extension Vim.
Wildcard
@jjclarkson que signifie ^Vet '^ M' signifie?
cokedude
6

Un serveur sans trou seddevrait être vraiment ancien, ou il manque des commandes de base. J'espère que edc'est là; il existait dans la première édition d'Unix .

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

^V^Msignifie taper Ctrl+ Vpuis Ctrl+ M(pour saisir un saut de ligne littéral). Si vous savez que toutes les lignes se terminent par CR LF, vous pouvez utiliser à la 1,$s/.$//place (supprimer sans discrimination le dernier caractère de chaque ligne).

Gilles 'SO- arrête d'être méchant'
la source