Remplacer en saut de ligne par un caractère [Résolu/Fermé]

Signaler
-
 Utilisateur anonyme -
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

8 réponses

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
Le plus simple étant quand même :

sed '/^$/! a\Endif/'
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
928
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Merci :-)

Je vais essayer aussi même si j'ai réussi avec ce que m'a mis Zipe ;-))

Salut Zipe ;-)

Toujours à l'heure :-)))

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

Merci, je teste ça :-)

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
/^$/!
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 ;-(
Utilisateur anonyme
Ahhh, d'accord okay ! Merci, une fois de plus :-)))

Bonne journée

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 :-)
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
Montre ton texte de départ et ce que tu veux vraiment à la sortie...

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
(...)

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
$ 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
(...) 

$

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 ;-)
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
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
Utilisateur anonyme
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
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
Sûrement un problème d'encodage ;-(
Utilisateur anonyme
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..
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
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" ?
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
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
If FileExists (@UserProfileDir & "\Local Settings\Temporary Internet Files\Content.IE5\*.*") $ <--

Ça donne quoi vu depuis un éditeur hexadécimal (hexdump -C fichier) ?
Utilisateur anonyme
Ç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 ;-))
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 971
hexdump -C fichier

ou

od -cx  fichier

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é ^^
Utilisateur anonyme
sed '/^If .*FileDelete/{ s/\FileDelete /\n&/}' Test > plop

Et voilà :-)

Merci beaucoup, bonne journée :)