script sh pour scanner des html et remplacer des chaines de caracteres - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 19-04-2006 à 18:32:23
bon avec l'aide d'un college ont a trouver ca,   
a mon avis ya bien plus court, mais ca marche : 
  
fichier scan : 
find . -name *.htm -type f -exec grep -l anciengroupe.fr {} /dev/null \; 
  
donc je fais : 
./scan > fic_liste 
  
fichier rep : 
  
#! /bin/bash 
for file in $(cat fic_liste) 
    do 
    cp $file $file.bak && 
    sed "s|$1|$2|g" $file.bak > $file 
done 
  
donc au final je fais :   
./ rep anciengroupe nouveaugroupe 
  
et ça marche impec, on peu tout incorporer pour que ca sois silencieux, 
mais je préfère en 2 executable. 
  
voila, si ca peux en aider certains ! 
vous pouvez proposer vos créations si le coeur vous en dis ! 
  
5 lignes de commandes et on évite de payer 20 pour des progs windows qui font la même chose. 
  
A++ 
 
Marsh Posté le 19-04-2006 à 19:40:55
| splurf a écrit : ou rpl qui fait ça tres bien | 
 
 
a la place de sed ? 
tu peux me dire comment ca marche ton rpl, j'ai pas encore installé linux 
a la maison la, je ne l'ai qu'au taf. 
 
Merci  
 
  
 
Marsh Posté le 19-04-2006 à 21:31:27
RPL(1)                                                               BSD General Commands Manual                                                               RPL(1) 
 
NAME 
     rpl - replace strings in files 
 
SYNOPSIS 
     rpl [-LhiwbqvsRepfdt] [-xSUFFIX] <old_string> <new_string> <target_file ...> 
 
DESCRIPTION 
     Basic usage is to specify two strings and one or more filenames or directories on the command line.  The first string is the string to replace, and the second 
     string is the replacement string. 
 
     -h, --help 
             A short help text. 
 
     -L, --license 
             Show the license and exit. 
 
     -xSUFFIX 
             Search only files ending with SUFFIX, e.g.  ``.txt''.  May be specified multiple times. 
 
     -i, --ignore-case 
             Ignore the case of old_string. 
 
     -w, --whole-words 
             Make old_string match only on word boundaries. 
 
     -b, --backup 
             Move the original files to filename~ before replacing them. 
 
     -q, --quiet 
             Quiet mode. 
 
     -v, --verbose 
             Verbose mode. 
 
     -s, --dry-run 
             Simulation mode, no files are changed. 
 
     -R, --recursive 
             Recurse into subdirectories. 
 
     -e, --escape 
             Expand escape sequences in old_string and new_string.  Examples of escape sequences are '\n' (new-line), '\t' (tab), '\x42' (hexadecimal number 42), 
             '\033' (octal number 033). 
 
     -p, --prompt 
             Prompt for confirmation before replacing each file. 
 
     -f, --force 
             Ignore errors when trying to restore permissions and file ownership. 
 
     -d, --keep-times 
             Keep modification times when replacing files. 
 
     -t, --use-tmpdir 
             Use a temporary directory for storing temporary files, usually the value of the environment variable TMPDIR.  The default is to put temporary files in 
             the same directory as the file being modified. 
 
     -a, --all 
             Do not ignore files and directories starting with . 
 
IMPLEMENTATION NOTES 
     An effort has been made to make the program behave as much as the original rpl as necessary.  Where it has been possible to make improvements, improvements have 
     been made.  This implementation lacks many of the bugs in the original. 
 
EXAMPLES 
     Replace all occurences of ``F'' (on word boundaries) with ``A'' in all text files under the grades/ directory: 
           $ rpl -Rwd -x'.txt' 'F' 'A' grades/ 
 
SEE ALSO 
     find(1), sed(1). 
 
HISTORY 
     This program was written for Debian as a free replacement for the non-free rpl program by Joe Laffey.
Marsh Posté le 18-04-2006 à 11:48:55
Bonjour a tous,
![[:alizean] [:alizean]](https://forum-images.hardware.fr/images/perso/alizean.gif)
Dans le cadre de mon stage je suis amené à modifier de grandes données de texte,
toutes en .htm, je dois remplacer l'ancien nom du groupe par le nouveau, et forcement
45 000 pages html à la main, merci bien.
Je précise que c'est non pas dans les titres htm style www.anciengroupe.htm mais
à l'intérieur du .htm lui même, comme par exemple : href="www.anciengroupe/procedure.htm"
Voila.
Donc voici que je j'ai fait avec mon boss qui n'avais pas le temps, visiblement de m'aider.
find repertoirealisterici unautrerep etundernier -name "*.htm*" -type f -exec grep -in anciengroupe.fr {} /dev/null \;
donc qui scan les .htm et qui affiche toutes les lignes avec anciengroupe.fr
j'ai trouvé sur le net un petit script (que j'ai modifié) qui remplace une chaine par une autre, et ça marche très bien.
#! /bin/bash
for file in *.htm
do
cp $file $file.bak &&
sed "s|$1|$2|g" $file.bak > $file
done
mais bon déja j'ai été incapable de modifier ce script pour qu'il aille chercher tous les .htm DANS les repertoires,
alors j'ai bien essayé de modifier la première ligne de commande en :
find repertoirealisterici unautrerep etundernier -name "*.htm*" -type f -exec grep -in anciengroupe.fr {} /dev/null \; | cut -d":" -f1
et ça ma donné tous les fichiers ou ils y avait les noms à changer, mais encore une fois, incapable de prendre les noms et de les
incorporer au script.
Voila, si quelqu'un à un nom de programme qui tourne sous windows ou linux, au choix, ou mieu, qui puisse me donner la ligne de
commande, ca serais super gentil de sa part..
D'avance merci
Message édité par Sndk le 19-04-2006 à 09:31:05
---------------
Mon topic - Mon Feed-Back