Remplacer une ligne sur plusieurs fichier dedié

  • Auteur de la discussion Auteur de la discussion JeunZ
  • Date de début Date de début
WRInaute accro
Bon ma dernière question de la journée, j'ai plusieurs milliers de fichiers qui contiennent une ligne de ce genre:

http_cache = 0


et je voudrais passer cette valeur à 1 donc:

http:_cache = 1


sur tous les fichiers, mais vu le nombre de fichiers je ne vais pas m'amuser à le faire manuellement, vous connaissez une technique, une ligne de commande pour le faire?

J'ai tous les accès au serveur ;-) Et au pire si vous avez une technique pour le faire sous windows je peux les télécharger et réuploader...
 
WRInaute impliqué
Un script Perl ou utiliser sed devrait faire l'affaire....

Tu trouveras surement de nombreux exemples de sed sur Google qui te conviendront
 
WRInaute accro
http://www.shellunix.com/sed.html

j'ai trouvé quelques explications mais ça me parait "compliqué" je vois pas trop comment construire ma commande dans mon cas.

Personne n'aurait un soft sous windows qui serait capable de remplacer une ligne dans tous les .ini comprit dans un dossier?
 
WRInaute impliqué
Hmmm ok désolé, bah je vais essayer de te faire un script Perl à l'arrache...

Ton truc http_cache est sur une seule ligne ?

Enfin avec un retour à la ligne ?
 
WRInaute accro
Oui il est sur une seule ligne au dessus c'est une ligne blanche et en dessous une autre ligne blanche...


et j'ai des milliers de .ini dans un répértoire qui sont de ce genre:

1.ini
2.ini
...
15000.ini
 
WRInaute impliqué
Hmmm globalement ca, c'est moche et fait à l'arrache....mais bon, ca devrait faire l'affaire.... si tes fichiers font pas plusieurs dizaines megas.... (la je fous tout le fichier en RAM....)

Je ne garantis rien, donc backup tout avant, je n'en serais pas responsable.... !

#!/usr/bin/perl -w

use strict;

my $file = $ARGV[0];

open(READFILE, '<', $file) or die("Cannot open file\n");
my @read = <READFILE>;
close(READFILE);

foreach (@read)
{
$_ =~ s/http_cache\ =\ 0/http_cache\ =\ 1/g;
print $_;
}

open(WRITEFILE, '>', $file) or die("Cannot open file\n");
print WRITEFILE @read;
close(WRITEFILE);


Tu fous ca dans un fichier rename.pl par exemple
Tu mets un petit chmod +x sur rename.pl

et hop :)

./rename.pl mon_fichier.ini...

Ca recherche EXACTEMENT http_cacheESPACE=ESPACE0

Si tous tes .ini sont dans un meme repertoire, il y a aussi moyen de faire un truc encore plus simple....
 
WRInaute accro
Oui mais .ini sont tous dans le même repertoire... Et mes fichiers sont pas gros du tout...


En tout cas un énorme merci ;-) Je vais faire un backup la avant de commencer ;)
 
WRInaute impliqué
Ok alors j'ai un truc tres simple qui ne necessite aucune manip que de lancer le script....une seconde je teste ca....
 
WRInaute impliqué
Ok essaies ca alors :

#!/usr/bin/perl -w

use strict;

opendir(DIRECTORY, ".");
my @files = readdir(DIRECTORY);
foreach (@files)
{
if ($_ ne "." && $_ ne "..")
{
open(READFILE, '<', $_) or die("Cannot open file\n");
my @read = <READFILE>;
close(READFILE);

foreach (@read)
{
$_ =~ s/http_cache\ =\ 0/http_cache\ =\ 1/g;
}
open(WRITEFILE, '>', $_) or die("Cannot open file\n");
print WRITEFILE @read;
close(WRITEFILE);
}
}

Cette fois sans passer d'arguments....

Juste ./rename.pl

Le truc lit chaque fichier dans le repertoire courant dans lequel il est executé...
Puis cherche http_cache = 0

Encore une fois aucune garantie sur son bon fonctionnement :)
 
WRInaute accro
Bon et bien je test ça dès la fin du download de la save (21 mega de .ini quand même).


Merci 1000 fois, je met ce petit script de coté il est très utile ;-)
 
WRInaute impliqué
JeunZ a dit:
Bon et bien je test ça dès la fin du download de la save (21 mega de .ini quand même).


Merci 1000 fois, je met ce petit script de coté il est très utile ;-)

De rien.... :)

C'est plutot impossible d'editer autant de trucs a la main....

Je suis encore la une petite heure si tu as des problemes avec pour debugguer ca...
 
WRInaute accro
J'ai déjà fait quelques petits scripts en perl (à la base je suis quand même hébergeur lol), donc à mon avis je serai capable de réctifier si il y a un problème :-)
 
WRInaute discret
Si tu as la commande replace ( qui fait partie du package mysql ) :

replace 'http_cache = 0' 'http_cache = 1' -- *.ini
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut