Script Shell : Supprimer un line feed [RESOLU] - Programmation
TomsGuide.com : 700 000 inscrits répondent à toutes vos questions high-tech et informatique.
Pour obtenir de l'aide, inscrivez-vous gratuitement !
 




Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Script Shell : Supprimer un line feed [RESOLU]
 
Profil : IDNaute
Plus d'informations

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.

Profil : IDNaute
Plus d'informations
Profil : IDNaute
Plus d'informations

Si la commande sed est disponible:

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


Profil : IDNaute
Plus d'informations

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.

Profil : IDNaute
Plus d'informations

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!
Profil : IDNaute
Plus d'informations

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 .

Profil : IDNaute
Plus d'informations

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!
Profil : IDNaute
Plus d'informations

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 ?

Profil : IDNaute
Plus d'informations

!!
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!
Profil : IDNaute
Plus d'informations

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

Profil : IDNaute
Plus d'informations

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!
Profil : IDNaute
Plus d'informations

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 !

Profil : IDNaute
Plus d'informations

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

Paranoid Android
Profil : IDNaute
Plus d'informations

edite ton premier message.


---------------
Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Profil : IDNaute
Plus d'informations
n°88452
21-12-2006 à 20:04:35
Masquer