syntaxe de sed

Invité
Invité n'ayant pas de compte PHPfrance

20 janv. 2007, 13:54

Bonjour.

J'ai une ligne à modifier dans une 40ène de fichiers php.

Ce script ne passe pas. Pouvez vous m'aider niveau syntaxe svp ?

ligne à modifier : $uidd = $urow['val'];
par : toto

Code : Tout sélectionner

#! /bin/bash for file in *.php do cp $file $file.bak && sed "s|$uidd = $urow[\'val\'];|toto|g" $file.bak > $file done
Et j'ai beau mettre des \ partout j'y arrive pas. J'ai aussi chercher de la doc (http://www.grymoire.com/Unix/Sed.html par exemple) mais je bloque.

Vraiment, si quelqu'un peut m'aider, merci !

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

20 janv. 2007, 14:07

Déjà, ce n'est pas du PHP ça... donc on déplacera

Ensuite, tu pourrais nous expliquer quel est le modèle de la ligne à modifier ? C'est toujours plus sympa que d'avoir à déchiffrer ta ligne :roll:

Invité
Invité n'ayant pas de compte PHPfrance

20 janv. 2007, 14:21

Déjà, ce n'est pas du PHP ça... donc on déplacera
Je suis d'ac (je crois que c'est du perl) mais j'ai pas trouvé mieux :-(
Ensuite, tu pourrais nous expliquer quel est le modèle de la ligne à modifier ? C'est toujours plus sympa que d'avoir à déchiffrer ta ligne :roll:
Bien sûr, excuse moi. J'ai cette variable à modifier dans un fichier php :

$uidd = $urow['val'];


Ce script permet de modifier tous les fichiers php du répertoire :

Code : Tout sélectionner

#! /bin/bash for file in *.php do cp $file $file.bak && sed "s|ANCIENSMOTS|NOUVEAUXMOTS|g" $file.bak > $file done
C'est hyper pratique quand on doit changer 20 fois par jours plusieurs fichiers quasi identiques...

Avec les caractères simples, ca marche. Niveau syntaxe, j'ai manifestement des lacunes pour citer les $,;(' etc.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

20 janv. 2007, 14:30

Je suis d'ac (je crois que c'est du perl) mais j'ai pas trouvé mieux :-(
Non, c'est un script shell :

Code : Tout sélectionner

#! /bin/bash
Ce script permet de modifier tous les fichiers php du répertoire :

Code : Tout sélectionner

[/quote] J'ai bien compris ce que faisait la boucle, ce que je voulais savoir c'est ce que tu voulais remplacer (la ligne avec les variables donc) et par quoi. [quote="Anonymous"] C'est hyper pratique quand on doit changer 20 fois par jours plusieurs fichiers quasi identiques... [/quote] Mouais... je suis pas trop d'accord Si tu dois changer la même chose, dans 20 fichiers, et tous les jours, c'est qu'il y a un problème. Si c'est une variable de confi à changer par exemple, tu ferais mieux d'utiliser un fichier de config, inclus dans chaque script qui l'utilise. Avec ça, tu ne changes tes infos qu'une fois.

ViPHP
ViPHP | 1380 Messages

20 janv. 2007, 15:12

Evite les séparateurs | car ils seront vu par sed comme une alternative (a|b --> a ou b). Tu dois également échapper
tous les caractères réservés comme $ (ancrage de fin de ligne) et [] (classe de caractères).

Code : Tout sélectionner

sed "s/\$uidd = \$urow\['val'\]/toto/g"
ripat

Invité
Invité n'ayant pas de compte PHPfrance

20 janv. 2007, 15:13

Alors en fait, je voudrais que cette ligne là :

$uidd = $urow['val'];

devienne :

$uidd = $urow['val'];
$uidd=str_replace("\n<br />\n", "", $uidd);

En fait, je réutilise la même ligne afin que sed se repère au bon endroit dans les fichiers.
Mouais... je suis pas trop d'accord
Si tu dois changer la même chose, dans 20 fichiers, et tous les jours, c'est qu'il y a un problème.

Si c'est une variable de confi à changer par exemple, tu ferais mieux d'utiliser un fichier de config, inclus dans chaque script qui l'utilise. Avec ça, tu ne changes tes infos qu'une fois.
J'y travaille activement en parallèle.

Invité
Invité n'ayant pas de compte PHPfrance

20 janv. 2007, 15:17

Evite les séparateurs | car ils seront vu par sed comme une alternative (a|b --> a ou b). Tu dois également échapper
tous les caractères réservés comme $ (ancrage de fin de ligne) et [] (classe de caractères).

Code : Tout sélectionner

sed "s/\$uidd = \$urow\['val'\]/toto/g"
Ok, je comprends mieux comment fonctionne sed maintenant. Merci merci merci !

(résolu)