Tom's Guide > Forum > Programmation > Script Shell : Supprimer un line feed [RESOLU]

Script Shell : Supprimer un line feed [RESOLU]

Forum Programmation : Script Shell : Supprimer un line feed [RESOLU]

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour,
j'ai un tas de fichiers qui comporte une anomalie - Je voudrais donc les corriger par un outil.
Le problème de ces fichiers est que de temps en temps, Un line feed traine. Je voudrais donc supprimer ce line feed, mais pas tous !
Voici un exemple de fichier
!toto;titi;tata;\n ligne OK
!toto;titi;tata;teet;\n ligne KO
tutu;\n Ligne OK
Je voudrais donc remplacer "teet;\n" par "teet;" ( teet étant toujours là quand il y a une anomalie )
Comment faire ? ( avec sed ou awk par exemple )
( environnement UNIX AIX, ksh )
Merci d'avance de vos réponses


Message édité par Speedycool@IDN le 21-12-2006 à 15:22:33
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Si la commande sed est disponible:

Code :
  1. sed "s/teet;\n/teet;/g" fichier


Répondre à CRicky

Merci pour ces réponses rapides.
J'avais déjà essayé la commande sed, mais ça ne fonctionne pas ( pas de message d'erreur, mais ce ne modifie rien ) - J'ai essayé en modifiant le \n par \012, puis ^j , mais ca ne marche pas non plus.
J'ai visité d'autres sites, dont Developpez.net, il y a bien des tas de propositions, mais ce ne correspond jamais à un string+caractère de contrôle.
Si qq a des idées ...
Merci d'avance.

Répondre à Speedycool@IDN

regle.sed:

Code :
  1. :join
  2. /teet;$/{N
  3. s/teet;\n/teet;/
  4. b join
  5. }



ensuite:

Code :
  1. sed -f regle.sed file_in > file_out



ca marche pas ca??

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

J'ai essayé, mais sans résultat :
"sed: There are too many '{'."
J'ai supprimé les { mais ca n'a rien changé dans mon fichier en sortie. Il me semble que "teet;\n" n'est pas reconnu comme ensemble par sed .

Répondre à Speedycool@IDN

t'as du mal copier coller:

Code :
  1. sh-3.1$ more regle.sed
  2. :join
  3. /teet;$/{N
  4. s/teet;\n/teet;/
  5. b join
  6. }
  7. sh-3.1$ more file_in
  8. !toto;titi;tata;
  9. !toto;titi;tata;teet;
  10. tutu;
  11. sh-3.1$ sed -f regle.sed file_in
  12. !toto;titi;tata;
  13. !toto;titi;tata;teet;tutu;
  14. sh-3.1$



chez moi ca marche, ou alors c'est pas ce que tu veux

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

J'ai refait le fichier,et l'ai adapté pour ma config :
:join
/END_HIST;$/{N
s/END_HIST;\n/END_HIST;/
b join
}
Et il me répond :
cannot be parsed._HIST;$/{N
J'ai tenté plusieurs choses ( remplacement de _ par -,puis suppression de _, ... ) mais c'est pareil.
désolé, mais je dois louper qq chose , mais quoi ?

Répondre à Speedycool@IDN

!!
la je vois pas trop, ce que tu peux faire, c'est poster comme ce que j'ai fait une partie de ton fichier (3 lignes), le fichier regle.sed que tu as créé et la sortie de la commande en entourant le tout avec la balise [ code ]
une question néammoins, c'est quel shell que tu utilises même si ca me parait bizarre?

EDIT: ce que je comprends pas c'est que la premiere fois t'as eu

Citation :


J'ai essayé, mais sans résultat :
"sed: There are too many '{'."



et après t'as un "cannot parsed" (avec le même fichier)??


Message édité par coca25 le 21-12-2006 à 13:36:48
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Voilà les éléments :
Fichier ENDHIST.sed :

Code :
  1. :join                       
  2. /END_HIST;$/{N             
  3. s/END_HIST;\n/END_HIST;/   
  4. b join                     
  5. }


Fichier à traiter : demo.rtf

Code :
  1. begin                                           
  2. END_HIT;BEG_HIST;05/05/2006 17:31:08;END_HIST;   
  3. BEG_3.4;05/05/2006 17:31:08


le résultat :

Code :
  1. xxxxxxx/par > sed -f ENDHIST.sed demo.rtf     
  2. cannot be parsed._HIST;$/{N                                   
  3. xxxxxxx/par >


Mon objectif est de supprimer le Line Feed qui est après "END_HIST;" et seulement ceux-là.
je suis sur UNIX AIX et j'utilise le shell ksh
Merci encore

Répondre à Speedycool@IDN

une derniere idée, c'est peut etre le format du fichier, tu l'ecris sous unix ou sous windows
dans le doute:

Code :
  1. dos2unix ENDHIST.sed
  2. dos2unix demo.rtf



c'est le seul cas ou j'ai une erreur

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Eh bien BRAVO !!!!
C'était ça : j'ai créé le fichier sur WINDOWS avant de le transférer sur UNIX,sans passer par la conversion. ET CA MARCHE !!!

Merci beaucoup !

Répondre à Speedycool@IDN

Mais comment je peux éditer le titre pour ajouter RESOLU ? je n'y arrives plus !

Répondre à Speedycool@IDN

edite ton premier message.

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

Petite demande supplémentaire à coca25 : peux-tu m'expliquer la fonction de chacune des lignes sed ( sauf la ligne 3 que je connais ) ? Merci encore.

Répondre à Speedycool@IDN

:join définit un label
/END_HIST;$/ permet de séléctionner que les lignes contenant ce pattern
le "N" permet de joindre 2 lignes pour les traiter en une fois
s/END_HIST;\n/END_HIST;/ sert à remplacer
b join permet de revenir au début

voilà :)

Répondre à coca25

En fait c'était pas "\n" mais "\r\n" ;)

Répondre à CRicky

Non,c'était bien "\n" ( je suis sous unix , donc pas de CR LF mais seulement LF).

Répondre à Speedycool@IDN
Tom's Guide > Forum > Programmation > Script Shell : Supprimer un line feed [RESOLU]
Aller à :

Il y a 1442 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens