Remplacer en saut de ligne par un caractère

Résolu
Utilisateur anonyme -  
 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

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      Le plus simple étant quand même :

      sed '/^$/! a\Endif/'
      0
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    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
    1. Utilisateur anonyme
       
      Merci :-)

      Je vais essayer aussi même si j'ai réussi avec ce que m'a mis Zipe ;-))
      0
  3. Utilisateur anonyme
     
    Salut Zipe ;-)

    Toujours à l'heure :-)))

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

    Merci, je teste ça :-)

    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      /^$/!
      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
    2. Utilisateur anonyme
       
      Ahhh, d'accord okay ! Merci, une fois de plus :-)))

      Bonne journée
      0
  4. Utilisateur anonyme
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      Montre ton texte de départ et ce que tu veux vraiment à la sortie...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      $ 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
  7. Utilisateur anonyme
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      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
    2. 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
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      Sûrement un problème d'encodage ;-(
      0
    4. 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..
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      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
  8. Utilisateur anonyme
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      If FileExists (@UserProfileDir & "\Local Settings\Temporary Internet Files\Content.IE5\*.*") $ <--

      Ça donne quoi vu depuis un éditeur hexadécimal (hexdump -C fichier) ?
      0
    2. 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 ;-))
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      hexdump -C fichier
      
      ou
      
      od -cx  fichier
      0
  9. Utilisateur anonyme
     
    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
    1. Utilisateur anonyme
       
      sed '/^If .*FileDelete/{ s/\FileDelete /\n&/}' Test > plop

      Et voilà :-)

      Merci beaucoup, bonne journée :)
      0