[Linux, bash] Contenu de fichiers et recherche/remplacement
4 réponses
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")
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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)
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)
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)
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.
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.
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.
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
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
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
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
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
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
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
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...?
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...?