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 !
A voir également:

15 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

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

Merci.
0
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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

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

Posez votre question
chris
 
oui oui, toujours avant, mais la commande
sed '/Conception.*societe/ s#.*#TOTO# la-societe.htm
ne me retourne rien ?
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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
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
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
for i in *; do
bla bla bla
...
done
0
chris
 
Evidemment, merci pour tout !
0
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
chris
 
en fait au milieu de mon texte, j'ai parfois ceci :
Conception & réisation
et ca plante à ce niveau là !
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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