Téléchargement
illégal
Posez votre question Signaler

Substitution de chaines de caractères [Résolu]

yaLINUXNUL 45Messages postés 22 mars 2008Date d'inscription - Dernière réponse le 26 mars 2008 à 09:54
Bonjour,
Bonjour,
Linux,shell
Substitution de chaines de caractères dans un fichier binaire en shell
A la base un fichier binaire fic_1
Dans le fichier fic_1 (en binaire)
- remplacer dans tout le fichier des chaines de caractères hexa par d'autre.
fic_2 contient en ascii les élements de référence et de substitution
toto titi
alpha xbeta
Le but : dans le fichier fic_1 il faut remplacer dans tout le fichier l'équivalent binaire de toto par titi et l'équivalent alpha par xbeta à partir du contenu du fichier fic_1.
Remarque la chaine de référence et la chaine à substituer ont la mème taille.
Merci de bien vouloir m'aider
fich_2.txt
----------
Arial Srial
OCR-B SCR-B
fich_1.txt
----------
aaaaaArialbbbbbOCR-Bcccccc
dddddOCR-BeeeeeArialffffff
ArialgggggOCR-Bhhhhhhhhhhiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjjjjj
resultat.txt
------------
aaaaaSrialbbbbbSCR-Bcccccc
dddddSCR-BeeeeeSrialffffff
SrialgggggSCR-Bhhhhhhhhhhiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjjjjj
# au départ le fichier de test est en ascii pour simplifier
# si fonctionne prendre le fichier binaire du genre :
#e suite favorable à votre demande. Je vous prie d'agréer, Mademoiselle, mes salutations distinguées. 08 2000 2000 (0,118 Euros/mn ttc) g Arial OCR-B   d      o  ÿ ?  i 4 ÿ Üz Úà  `  ?À
#
# lire fic2 et récupérer dans des variables les chaines d'origine et les chaines substituées
rm fich_tmp
set -x
y=0
while read ligne
do
y=$(( $y + 1 ))
i=0
for champ in $ligne
do
i=$(( $i + 1 ))
echo `$i $y : $champ`
# sur l'écran : champ11 Arial
# sur l'écran : champ21 Srial
# sur l'écran : champ12 OCR-B
# sur l'écran : champ22 SCR-B
{champs$y$i}=$champ
done
done <fich_2.txt
yfin=$y
ifin=2
y=0
while [ $y -ne $yfin ]
do
y=$(( $y + 1 ))
i=0
while [ $i -ne $ifin ]
do
i=$(( $i + 1 ))
# ${champs$y$i} est sensé contenir les valeurs lue dans le fichier
# mais vide
# A faire conversion ascii hexa de la chaine (je ne sais pas encore comment
echo ${champs$y$i} >> fich_tmp
sed -i.orig 's/'"${champs$y{1}}"'/'""${champs$y{2}}"/' fich_1.txt
done
done <fich_1.txt
merci de bien vouloir m'aider à comprendre ou je me plante
Lire la suite 

Substitution de chaines de caractères »

3 réponses
Réponse
+0
moins plus
Salut,

Tu t'e**erdes pour rien :
[rep]$ cat foo.sh
#! /bin/bash

while read line
do
chaine=${line% *}
remplace=${line#* }
sed -i "s/$chaine/$remplace/g" fich_1.txt
done < fich_2.txt

[rep]$ cat fich_1.txt
aaaaaArialbbbbbOCR-Bcccccc
dddddOCR-BeeeeeArialffffff
ArialgggggOCR-Bhhhhhhhhhhiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjjjjj

[rep]$ ./foo.sh
[rep]$ cat fich_1.txt
aaaaaSrialbbbbbSCR-Bcccccc
dddddSCR-BeeeeeSrialffffff
SrialgggggSCR-Bhhhhhhhhhhiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjjjjj
[rep]$ 
;-))
yaLINUXNUL - 26 mars 2008 à 09:50
Efficectivement c'est beaucoup plus simple, beaucoup plus efficace que mon usine à gaz.

Je te remercie énormément

Cordialement
Ajouter un commentaire
Réponse
+0
moins plus
La premier test est immédiatement concluant
Ajouter un commentaire
Ce document intitulé « Substitution de chaines de caractères » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?