Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Linux, bash] Contenu de fichiers et recherche/remplacement

4 réponses
Avatar
Marc
Bonjour,

Pardonnez-moi si je ne poste pas dans le bon forum, mais je n'en trouve
aucun (francophone, du moins) qui soit consacré à la programmation en bash
?

Je souhaite réaliser une même modification sur le contenu d'un assez grand
nombre de fichiers. Il s'agit de remplacer width="512" par width="554".
D'où l'idée d'écrire un petit script, plutôt que de réaliser l'opération à
la main...

Je rencontre cependant un problème auquel je ne trouve pas de solution : les
fichiers produits en sortie perdent toute indentation...!? Vous trouverez
ci-dessous mon script...

rm *.php.tmp -f
ls *.php | while read fichierPHP; do
cat $fichierPHP | while read ligneFichier; do
ligneModifiee="${ligneFichier//width=\"512\"/width=\"554\"}"
echo "$ligneModifiee" >> "$fichierPHP".tmp
done
done

Notez que pour l'instant, par précaution, je crée un fichier "temporaire" de
même nom que le fichier source (plus l'extension ".tmp")

Toute aide bienvenue ! D'avance, MERCI !!!

4 réponses

Avatar
Stephane Zuckerman
Bonjour,

Je souhaite réaliser une même modification sur le contenu d'un assez grand
nombre de fichiers. Il s'agit de remplacer width="512" par width="554".
D'où l'idée d'écrire un petit script, plutôt que de réaliser l'opération à
la main...


C'est typiquement le genre de choses que Sed traite à merveille. Pourquoi
ne pas l'utiliser ?

Quelque chose du genre :
#!/bin/bash
for i in *.php ; do
sed -e 's/width="512"/width="554"/g' < $i > ${i}.tmp
mv ${i}.tmp $i
done

Sed ne changera que la chaîne concernée, sans changer l'indentation.


Stéphane

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)

Avatar
Marc Lasson
Marc wrote:
Bonjour Marc,

Je rencontre cependant un problème auquel je ne trouve pas de solution : les
fichiers produits en sortie perdent toute indentation...!? Vous trouverez
ci-dessous mon script...


Tu as essayé sed ?

sed -e "s/width="512"/width="554"/g" fichier.php > fichier.php.tmp

Je te laisse l'appliquer à tous les fichiers de ton répertoire.

--
Marc.

Avatar
noa
Marc a écrit:

Bonjour,

Pardonnez-moi si je ne poste pas dans le bon forum, mais je n'en trouve
aucun (francophone, du moins) qui soit consacré à la programmation en bash
?

Je souhaite réaliser une même modification sur le contenu d'un assez grand
nombre de fichiers. Il s'agit de remplacer width="512" par width="554".
D'où l'idée d'écrire un petit script, plutôt que de réaliser l'opération à
la main...

Je rencontre cependant un problème auquel je ne trouve pas de solution :
les fichiers produits en sortie perdent toute indentation...!? Vous
trouverez ci-dessous mon script...

rm *.php.tmp -f
ls *.php | while read fichierPHP; do
cat $fichierPHP | while read ligneFichier; do

ligneModifiee="${ligneFichier//width="512"/width="554"}"

echo "$ligneModifiee" >> "$fichierPHP".tmp
done
done

Notez que pour l'instant, par précaution, je crée un fichier "temporaire"
de même nom que le fichier source (plus l'extension ".tmp")

Toute aide bienvenue ! D'avance, MERCI !!!


Tu peux essayer avec:
$ ls|while read i;do mv $i $i~; sed s/width="512"/width="554"/g
$i~>$i;done
ça devrait marcher... tant que tu ne rencontres pas de noms exotiques
--
noa
ouv a s à cdm, g

Avatar
Marc
Merci pout toutes ces réponses,

J'ai utilisé sed, et tout marche à merveille...

Cela dit, pouvez-vous me confirmer que mon script initial perdait
l'indentation parce que 'read' ignore en début de ligne tout ce qui est
'espace', tabulations, etc...?

Marc