3 votes

Remplacement de LineFeed \x0a avec SED

Je dois supprimer beaucoup de Linefeeds (Hex \x0a ) dans un fichier journal.

Je n'ai que du sed pour résoudre le problème. C'est un peu compliqué je sais..

Avez-vous une idée de la façon de résoudre le problème ?

Voici un exemple de fichier texte : http://s000.tinyupload.com/index.php?file_id=05715208147126674999

hexdump -C hexprob.txt
00000000 45 0a 69 0a 6e 0a 66 0a 61 0a |E.i.n.f.a.|

J'utilise le code suivant pour supprimer le 'E' :

sed -r 's/ \x45 //g' hexprob.txt | hexdump -C

00000000 0a 69 0a 6e 0a 66 0a 61 0a |.i.n.f.a.|

Mais si je veux enlever le ' \x0a ' cela ne fonctionne pas :

sed -r 's/ \x0a //g' hexprob.txt | hexdump -C

00000000 45 0a 69 0a 6e 0a 66 0a 61 0a |E.i.n.f.a.|

Vous savez quoi faire ? Je ne sais pas pourquoi je ne peux pas le remplacer ou le supprimer de la même manière que n'importe quelle autre valeur hexagonale ?

Merci beaucoup ! Fake4d

3voto

user9517 Points 113163

L'utilitaire sed est orienté ligne. Une ligne est lue et placée dans l'espace des motifs (l'espace des motifs ne contient pas de symbole \n ). Les actions sed sont appliquées à l'espace du motif et la ligne est ensuite écrite, avec un symbole \n annexé. C'est pourquoi il ne fait pas ce que vous attendez.

Si vous voulez supprimer toutes les nouvelles lignes d'un fichier, vous pouvez procéder ainsi

sed ':a;N;$!ba;s/\n//g' file

Cette opération boucle effectivement sur le fichier en lisant les lignes et en les ajoutant à l'espace des motifs jusqu'à ce que la dernière ligne soit atteinte. \n 's.

  • :a crée une étiquette.
  • N lit la ligne suivante dans l'espace paternel
  • $ ! si ce n'est pas la dernière ligne ba branche vers un
  • s//n//g remplace toutes les occurrences /g de \n avec rien.

En fonction de la taille de votre fichier, cela peut ne pas fonctionner car il peut y avoir des limites à la taille de l'espace du motif. Il est généralement plus pratique d'utiliser tr pour ce faire

tr -d '\n' <file

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X