Remplacer une ligne sur plusieurs fichier dedié

  • Auteur de la discussion Auteur de la discussion JeunZ
  • Date de début Date de début
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...
 
Un script Perl ou utiliser sed devrait faire l'affaire....

Tu trouveras surement de nombreux exemples de sed sur Google qui te conviendront
 
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?
 
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 ?
 
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
 
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....
 
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 ;)
 
Ok alors j'ai un truc tres simple qui ne necessite aucune manip que de lancer le script....une seconde je teste ca....
 
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 :)
 
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 ;-)
 
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...
 
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 :-)
 
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