2010-03-24 3 views
0

J'essaie de supprimer les retours chariot (\r) d'un fichier avec la commande suivante sur AIX, mais il supprime également ma dernière ligne. Aucune suggestion?Commande de script Sed tronquant la dernière ligne

sed -e 's/\r\n/\n/g' ./excprule > ./excprule.tst 

séquence de commande:

 
dev1:> sed -e 's/\r\n/\n/g' ./test_file > ./test_file.tst 
dev1:> diff test_file.tst test_file 
diff: 0653-827 Missing newline at the end of file test_file. 
26a27 
> Trailer 25 

Edit: une solution de contournement par Found faire la même chose avec perl, mais je voudrais savoir pourquoi cela ne fonctionne pas.

+3

Apparemment, diff se plaint de votre fichier d'origine. Fondamentalement, il dit qu'il se termine par un \ r, alors qu'il devrait se terminer par un \ n. Apparemment, rien de mal dans votre commande sed alors. – tonio

Répondre

1

Vous pouvez également utiliser dos2unix si vous l'avez sous AIX, cependant, avec sed,

sed '$!{:a;N;s/\r\n/\n/;ta}' file 

bandes sed au large de la nouvelle ligne à chaque fois qu'il traite la ligne courante (voir la page de manuel), de sorte que vous ne serez pas vraiment trouver le \r\n.

+0

Je crois que supprimer le '\ r' serait dos2unix? – Cascabel

+0

oui vous avez raison, l'ai inversé. – ghostdog74

+1

Pourquoi ne pas simplement utiliser 'tr '\' < file.in > file.out'? – tonio

Questions connexes