Remplacer en saut de ligne par un caractère

Résolu/Fermé
Utilisateur anonyme - Modifié par Saachaa le 21/12/2011 à 13:09
 Utilisateur anonyme - 21 déc. 2011 à 15:40
Bonjour à tous,

Voici le thème, j'aimerais remplacer un saut de ligne par un EndIf.

Voici mon fichier :

If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")

If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")

(...)



J'ai utilisé la commande : sed -e "s/$/\\n/", pour créer un espace entre les lignes.

Et j'espérais qu'un : sed -e 's/\\n/EndIf/g', me donnerait ce que je voulais, mais en vain...

Fichier voulu après changement
:

If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf
If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")
EndIf
(...)


Merci à vous :-)



?? Saachaa ?
Contributeur CCM
A voir également:

8 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 13:18
Salut,

$ cat plop 
If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")

If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")

If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")
If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")

$ sed '/^$/! s/$/\nEndif/' plop 
If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")
Endif

If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")
Endif

If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")
Endif
If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")
Endif

$ 

;-))
1
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 13:21
Le plus simple étant quand même :

sed '/^$/! a\Endif/'
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 21/12/2011 à 13:30
Essaye ceci
johand@osiris: ~/src/CCM/sed $ cat if.dat   
If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")  
If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")   
johand@osiris: ~/src/CCM/sed $ sed -e '/^if/I s/$/ ENDIF/' <  if.dat  
If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*") ENDIF  
If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")  ENDIF
johand@osiris: ~/src/CCM/sed $ sed -e '/^if/I s/$/\nENDIF/' <  if.dat
If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")
ENDIF
If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*") 
ENDIF


Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
1
Merci :-)

Je vais essayer aussi même si j'ai réussi avec ce que m'a mis Zipe ;-))
0
Utilisateur anonyme
21 déc. 2011 à 13:24
Salut Zipe ;-)

Toujours à l'heure :-)))

Dis moi, tu peux m'expliquer ! et /a stp ?

Merci, je teste ça :-)

0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 13:29
/^$/!
Si ce n'est pas une ligne vide. Le "!" exprime la négation et le "^$" représente une ligne vide, le " symbolisant le début de la ligne, et le "$" la fin.


a\
La commande pour ajouter (a = append). On ajoute ce qui se trouve après l'anti slash..

On peut aussi l'écrire :
sed '/^$/! a\
Endif
' fichier


PS. Dans le post précédent, le "/" en fin de "Endif" est en trop ;-(
0
Utilisateur anonyme
21 déc. 2011 à 13:47
Ahhh, d'accord okay ! Merci, une fois de plus :-)))

Bonne journée
0
Utilisateur anonyme
21 déc. 2011 à 14:29
Re,

@Jisisv,

Ta commande fonctionne, mais je viens de me rendre compte que je dois sauter une ligne après le Then, sinon ça ne fonctionne pas.

Comme ceci :

If FileExists (@HomeDrive & "\Cookies\*.*")
Then FileDelete (@HomeDrive & "\Cookies\*.*")
Endif



Je vais chercher de mon côté et je vous dis quoi :-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 14:37
Montre ton texte de départ et ce que tu veux vraiment à la sortie...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
21 déc. 2011 à 14:39
Vi :-)

Mon texte actuel :

If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf
If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")
EndIf
(...)


Le texte désiré :


If FileExists (@HomeDrive & "\Cookies\*.*")
Then FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf
If FileExists (@HomeDrive & "\Temp\*.*")
Then FileDelete (@HomeDrive & "\Temp\*.*")
EndIf
(...)

0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 14:46
$ cat plop 
If FileExists (@HomeDrive & "\Cookies\*.*") Then FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf
If FileExists (@HomeDrive & "\Temp\*.*") Then FileDelete (@HomeDrive & "\Temp\*.*")
EndIf
(...) 

$ sed '/If .*Then/{ s/Then /\n&/}' plop 
If FileExists (@HomeDrive & "\Cookies\*.*") 
Then FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf
If FileExists (@HomeDrive & "\Temp\*.*") 
Then FileDelete (@HomeDrive & "\Temp\*.*")
EndIf
(...) 

$
0
Utilisateur anonyme
21 déc. 2011 à 14:47
Ah oui quand même... tu m'étonnes que je ne trouvais pas...

Tu peux m'expliquer ce que tu as fais si ça ne te dérange pas parce-que je suis largué...

Merci ;-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 14:55
Pour être plus exact j'aurai du écrire "/^If .*Then /" au lieu de "/If .*Then/"

/^If .*Then/
Si on trouve un motif qui commence (^) par If (suivi d'un espace) puis d'un ou plusieurs caractères, voire d'aucun, suivi ensuite de Then lui même suivi d'un espace, appliquer la ou les commande(s) qui se trouve(nt) entre les accolades


{
Début regroupement de commandes


s/Then /\n&/
On substitue "Then " (et l'espace derrière), par un saut de ligne (\n) et lui même (l'esperluette "&" symbolisant le motif présent dans la partie gauche de l'expression).


}
Fin regroupement de commandes
0
Utilisateur anonyme
21 déc. 2011 à 15:05
Ahhh d'accord, merci Zipe :-))

Mais dis moi, lorsque j'ouvre ceci sous Windows (que c'est de la programmation Autoit), il me met ceci :

If FileExists (@HomeDrive & "\Cookies\*.*") 0Then FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf

0 = Un caractère en forme de carré, pour dire que le symbole n'est pas compris par l'éditeur de texte (notepad).

Tandis que sur Debian cela fonctionne très bien
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 15:08
Sûrement un problème d'encodage ;-(
0
Utilisateur anonyme
21 déc. 2011 à 15:10
Yes, mais que peut-on faire ?

Parce-que ça ne le fait pas quand j'utilise sed -e "s/$/\\n/" pour sauter des lignes...

On ne peut pas s'inspirer de cette commande pour en créer une autre ? Parce-que, cela n'engage que moi mais je pense que c'est le fait d'"imbriquer" {commandes} qui pose problème..
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 15:13
Mais dis moi, lorsque j'ouvre ceci sous Windows
C'est quoi ceci ??

Ton fichier il vient d'où ? Windows ou Linux ?
Tu utilises "sed" sous Windows ou Linux ?

Peux-tu identifier ce caractère via un éditeur hexadécimal ou à défaut via "cat -A" ou "sed -n l" ?
0
Ceci, c'est le fichier terminé, en l'occurrence :

If FileExists (@HomeDrive & "\Cookies\*.*")
Then FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf
If FileExists (@HomeDrive & "\Temp\*.*")
Then FileDelete (@HomeDrive & "\Temp\*.*")
EndIf
(...)


Mon fichier vient de Gedit, pas de Windows, il a été créé sur ma Debian. J'ai rajouté les "^M", pour qu'il soit lisible sur Windaube.

J'utilise sed sur Debian.


Cat -A ->

If FileExists (@UserProfileDir & "\Local Settings\Temporary Internet Files\Content.IE5\*.*") $ <--
Then FileDelete (@UserProfileDir & "\Local Settings\Temporary Internet Files\Content.IE5\*.*")^M$
Endif^M$
^M$

Pas de ^M, c'est sûrement ça le problème...

Je supprime tous les ^M, et je les rajoute voir si ça passe ;-))

?? Saachaa ?
Contributeur CCM
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 15:25
If FileExists (@UserProfileDir & "\Local Settings\Temporary Internet Files\Content.IE5\*.*") $ <--

Ça donne quoi vu depuis un éditeur hexadécimal (hexdump -C fichier) ?
0
Utilisateur anonyme
21 déc. 2011 à 15:33
Ça donne quoi vu depuis un éditeur hexadécimal (hexdump -C fichier) ?

J'en sais rien vu que je sais pas ce que c'est, mais c'était bien la problème ;-))
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
21 déc. 2011 à 15:38
hexdump -C fichier

ou

od -cx  fichier
0
Utilisateur anonyme
21 déc. 2011 à 15:36
Une dernier truc et je clos le sujet :-)

J'ai trop prie l'habitude du shell, et ceci ne passe pas :

If FileExists (@HomeDrive & "\Cookies\*.*")
Then FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf
If FileExists (@HomeDrive & "\Temp\*.*")
Then FileDelete (@HomeDrive & "\Temp\*.*")
EndIf
(...)


Ce qu'il me faudrait, c'est cela :

If FileExists (@HomeDrive & "\Cookies\*.*") Then
FileDelete (@HomeDrive & "\Cookies\*.*")
EndIf
If FileExists (@HomeDrive & "\Temp\*.*") Then
FileDelete (@HomeDrive & "\Temp\*.*")
EndIf
(...)


Désolé ^^
0
Utilisateur anonyme
21 déc. 2011 à 15:40
sed '/^If .*FileDelete/{ s/\FileDelete /\n&/}' Test > plop

Et voilà :-)

Merci beaucoup, bonne journée :)
0