Remplacer une ligne par une autre selon mots

chris -  
 chris -
Bonjour,
je cherche à remplacer une ligne par une autre dans toute une arborescence.
Je m'explique: si mon fichier contient "titi" et "toto" sur la même ligne, alors je veux supprimer cette ligne et la remplacer par une autre (contenant plusieurs mots clés).
J'ai trouvé pas mal d'infos pour remplacer une chaine de caractères par une autre, mais ça ne marche pas avec mon besoin, j'ai parfois plus d'espace, des virgules, la seule constance, c'est "titi" et "toto", merci pour votre aide !
Configuration: linux-debian

15 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Pour t'aider au mieux, poste un exemple précis de ce que tu veux : avant => après...

    Merci.
    0
  2. chris
     
    OK, alors voilà:
    j'ai cette ligne :
    Conception & Réalisation <a href="http://www.cortix.fr" target="_blank" class="copyright">societe</a>, Web agency -2007<br>
    ou parfois cette ligne:
    Conception et réalisation <a href="http://www.cortix.fr" target="_b lank" class="liens">societe</a> 2008, web agency

    Bref, je veux virer les lignes contenant "conception" et "societe", et j'ai pas mal de variantes (l'année, des espaces, des virgules etc...) et les remplacer par un code (une image, en fait)
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    jp@MDK:~/tmpfs ssh$ cat fichier.txt
    Conception & Réalisation <a href="http://www.cortix.fr" target="_blank" class="copyright">societe</a>, Web agency -2007<br>
    ou parfois cette ligne:
    Conception et réalisation <a href="http://www.cortix.fr" target="_b lank" class="liens">societe</a> 2008, web agency
    
    Contraception & Réalisation <a href="http://www.cortix.fr" target="_blank" class="copyright">societe</a>, Web agency -2007<br>
    ou parfois cette ligne:
    Conception et réalisation <a href="http://www.cortix.fr" target="_b lank" class="liens">entreprise</a> 2008, web agency
    
    jp@MDK:~/tmpfs ssh$ sed '/Conception.*societe/ s#.*#IMAGE#' fichier.txt
    IMAGE
    ou parfois cette ligne:
    IMAGE
    
    Contraception & Réalisation <a href="http://www.cortix.fr" target="_blank" class="copyright">societe</a>, Web agency -2007<br>
    ou parfois cette ligne:
    Conception et réalisation <a href="http://www.cortix.fr" target="_b lank" class="liens">entreprise</a> 2008, web agency
    jp@MDK:~/tmpfs ssh$
    ;-))
    0
  4. chris
     
    En fait ma ligne ne commence pas forcement par "Conception", elle contient ce mot à coup sur, ainsi que le mot "societe", mais j'ai parfois:
    <td height="35" align="center" valign="middle" class="texte">Conception et réalisation <a href="http://www.cortix.fr" target="_blank" class="orange">societe</a> 2008, web agency</td>

    ou parfois:
    <p><span class="liens_accueil"><a href="index.htm" class="liens_accueil">Accueil</a>   I   <a href="presentation.htm" class="liens_accueil">Présentation</a>   I   <a href="realisations.htm" class="liens_accueil">Réalisations</a>   I  <a href="contact.php" class="liens_accueil">Contact</a>     -    <a href="http://www.cortix.fr" target="_blank" class="liens_accueil">Conception et réalisation societe 2008, web agency</a></span></p>

    Je veux virer toutes ces lignes (et donc pas mal de repertoires à parser), et remplacer tous ces contenus pas une image dont le code peut être dans un fichier.
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Le fait que Conception ne soit pas forcément en début de phrase ne change rien, par contre ce qu'il faut savoir c'est si Conception est toujours avant societe ???
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. chris
     
    oui oui, toujours avant, mais la commande
    sed '/Conception.*societe/ s#.*#TOTO# la-societe.htm
    ne me retourne rien ?
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ben c'est bizarre ;-\

    Au passage il manque une quote simple dans ta syntaxe (faute de frappe ?) après le dernier dièse...
    jp@MDK:~/tmpfs ssh$ cat new_fich
    En fait ma ligne ne commence pas forcement par "Conception", elle contient ce mot à coup sur, ainsi que le mot "societe", mais j'ai parfois:
    <td height="35" align="center" valign="middle" class="texte">Conception et réalisation <a href="http://www.cortix.fr" target="_blank" class="orange">societe</a> 2008, web agency</td>
    
    ou parfois:
    <p><span class="liens_accueil"><a href="index.htm" class="liens_accueil">Accueil</a>   I   <a href="presentation.htm" class="liens_accueil">Présentation</a>   I   <a href="realisations.htm" class="liens_accueil">Réalisations</a>   I  <a href="contact.php" class="liens_accueil">Contact</a>     -    <a href="http://www.cortix.fr" target="_blank" class="liens_accueil">Conception et réalisation societe 2008, web agency</a></span></p>
    
    Je veux virer toutes ces lignes (et donc pas mal de repertoires à parser), et remplacer tous ces contenus pas une image dont le code peut être dans un fichier.
    
    jp@MDK:~/tmpfs ssh$ sed '/Conception.*societe/ s#.*#IMAGE#' new_fich
    IMAGE
    IMAGE
    
    ou parfois:
    IMAGE
    
    Je veux virer toutes ces lignes (et donc pas mal de repertoires à parser), et remplacer tous ces contenus pas une image dont le code peut être dans un fichier.
    jp@MDK:~/tmpfs ssh$
    Chez moi ça marche ;-)
    0
  8. chris
     
    oui désolé en fait ça fonctionne, je n'avais pas fais gaffe que le fichier n'était pas modifié ;o)
    Par contre ma syntaxe est un peu + "remplie" que IMAGE, mon texte à remplacer est:
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="http:\/\/fpdownload.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=8,0,0,0" width="80" height="16"><param name="allowScriptAccess" value="sameDomain" \/><param name="movie" value="button.swf" \/><param name="quality" value="high" \/><param name="wmode" value="transparent" \/><param name="bgcolor" value="#ffffff" \/><embed src="button.swf" quality="high" wmode="transparent" bgcolor="#ffffff" width="80" height="16" allowScriptAccess="sameDomain"type="application\/x-shockwave-flash"pluginspage="http:\/\/www.macromedia.com\/go\/getflashplayer" \/><\/object>

    Du coup j'ai un joli message retour
    sed: -e expression n°1, caractère 174: option inconnue pour `s'

    En tout cas on approche du but, je le sens !
    0
  9. chris
     
    C'est bon, en fait j'avais des dieses qui trainaient au milieu de mon texte à modifier, tout est OK, merci beaucoup, il ne me reste plus qu'à enregistrer la modification
    0
  10. chris
     
    Derniere petite question, je fais une boucle pour parser tous mes repertoires , mais certains fichiers ont un espace dans leur nom, ce qui fait que mon script se bloque, une solution ?
    Voila le script:
    #!/bin/sh

    BASEDIR=/datas/clients
    cd $BASEDIR

    for i in `ls`; do
    cd $BASEDIR/$i
    for z in `ls`; do

    FICHTEMP=$BASEDIR/$i/fichtemp
    sed '/Conception.*societe/ s#.*#<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="http://fpdownload2.macromedia.com/pub/shockwave/cabs/flash/swflash.cab\#version=8,0,0,0" width="80" height="16"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="button.swf" /><param name="quality" value="high" /><param name="wmode" value="transparent" /><param name="bgcolor" value="\#ffffff" /><embed src="button.swf" quality="high" wmode="transparent" bgcolor="\#ffffff" width="80" height="16" allowScriptAccess="sameDomain"type="application/x-shockwave-flash"pluginspage="https://get.adobe.com/flashplayer/" /></object>#' $z > $FICHTEMP
    cp $FICHTEMP $z

    done
    done
    0
  11. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    for i in *; do
    bla bla bla
    ...
    done
    0
  12. chris
     
    Rebonjour,
    la commande fonctionne dans 98% des cas, mais j'ai quelques fichiers récalcitrants (surtout des lignes) pour lesquelles la commande ne passe pas, voici un exemple de ligne qui passe au travers:
    ma commande:
    sed '/Conception.*Societe/ s#.*#TOTO#' default.htm

    la ligne qui passe au travers:
    <td width="422" height="30" valign="middle" class="copyright"><a href="http://www.cortix.fr" target="_blank">Conception & réalisation Societe, Web Agency, 2007 </a></td>

    Ca vient de quoi ? les guillemets ?les dble quotte ?
    Merci !
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Bizarre chez moi ça passe bien ;-\

      Essaye comme ça, au cas ou la casse aurait une incidence :
      sed '/Conception.*Societe/I s#.*#TOTO#' default.htm 
      ...
      0
  13. chris
     
    en fait si je ne prends que cette ligne en effet ca marche, mais la ligne du dessus me pose problème, voila les 2 lignes qui me posent problème:

    <td dth="425" height="30" align="left" valign="middle" class="copyright"><a href="https://get.adobe.com/flashplayer/" target="_blank"><img src="gfx/dlflash.jpg" width="250" height="30" border="0"></a></td>
    width="422" height="30" valign="middle" class="copyright"><a href="http://www.cortix.fr" target="_blank">Conception & réisation Societe, Web Agency, 2007 </a></td>
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      En fait pour moi la seule qui passe au travers c'est celle-là :

      <td dth="425" height="30" align="left" valign="middle" class="copyright"><a href="https://www.adobe.com/" target="_blank"><img src="gfx/dlflash.jpg" width="250" height="30" border="0"></a></td>

      Mais c'est normal, il n'y a aucun motif qui corresponde... :-))
      0
  14. chris
     
    en fait au milieu de mon texte, j'ai parfois ceci :
    Conception & réisation
    et ca plante à ce niveau là !
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Je ne sais que te dire, chez moi ça passe, la regex (.*) est sensée tout prendre normalement.

      Essaie de remplacer ces 2 caractères par d'autres et vois si ça passe ou si ça coince toujours...
      0
  15. chris
     
    le truc bizarre, c'est que lorsque je fais un cat de la ligne, je vois ça:
    Conception & rsation

    et quand je vais un vi, je vois ça:
    Conception & réisation

    Etrange non ?
    0