Script Shell : Supprimer un line feed [RESOLU]
Forum Programmation : Script Shell : Supprimer un line feed [RESOLU]
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
regardes par la:
http://www.developpez.net/forums/s [...] p?t=248439
Si la commande sed est disponible:
Code :
|
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.
regle.sed:
Code :
|
ensuite:
Code :
|
ca marche pas ca??
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 .
t'as du mal copier coller:
Code :
|
chez moi ca marche, ou alors c'est pas ce que tu veux
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 ?
!!
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 :
|
et après t'as un "cannot parsed" (avec le même fichier)??
Message édité par coca25 le 21-12-2006 à 13:36:48
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Voilà les éléments :
Fichier ENDHIST.sed :
Code :
|
Fichier à traiter : demo.rtf
Code :
|
le résultat :
Code :
|
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
une derniere idée, c'est peut etre le format du fichier, tu l'ecris sous unix ou sous windows
dans le doute:
Code :
|
c'est le seul cas ou j'ai une erreur
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 !
Mais comment je peux éditer le titre pour ajouter RESOLU ? je n'y arrives plus !
edite ton premier message.
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.
: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à
Merci beaucoup !
En fait c'était pas "\n" mais "\r\n"
Non,c'était bien "\n" ( je suis sous unix , donc pas de CR LF mais seulement LF).
Il y a 1442 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

CRicky