Rechercher : dans
Par :

Substitution de chaines de caractères

Dernière réponse le 26 mar 2008 à 09:54:42 yaLINUXNUL, le 22 mar 2008 à 15:31:22 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP vm linux
Internet Explorer 7.0

Meilleures réponses pour « Substitution de chaines de caractères » dans :
[PHP] Les ressemblances à ne pas confondre VoirIntroduction Concaténation ou paramètres ? Guillemets/Apostrophe Structure require/include isset vs empty htmlentities ou htmlspecialchars ? Nombre de signes égal Introduction Cette astuce présente plusieurs fonction ou astuces en...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Javascript - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractère Une chaîne de caractère est, comme son nom l'indique, une suite de caractères. On la représente par la suite de caractères encadrée par des guillemets simples (') ou doubles ("), sachant que les deux types de...

1

jipicy, le 22 mar 2008 à 18:40:08

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]$ 
;-))
JP. Éleveur de pingouins

Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

2

yaLINUXNUL, le 26 mar 2008 à 09:50:25

Efficectivement c'est beaucoup plus simple, beaucoup plus efficace que mon usine à gaz.

Je te remercie énormément

Cordialement

Répondre à yaLINUXNUL

3

 yaLINUXNUL, le 26 mar 2008 à 09:54:42

La premier test est immédiatement concluant

Répondre à yaLINUXNUL