Remplacer un caractère dans un fichier essentiellement binaire
13 réponses
Olivier Miakinen
Bonjour,
Mon problème précédent ayant été brillamment résolu par Stéphane
Chazelas, en voici un nouveau.
En fait c'est tout simple. J'ai des fichiers qui commencent par la
chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7
pour donner GIF87a. Je suppose que sed a des chances d'y arriver,
mais je crains un bug du fait que le reste du contenu est du binaire
(pour ceux qui n'auraient pas deviné, ce sont des images GIF).
Est-ce que mes craintes sont fondées ? Et si oui, quelle autre option
pour transformer ce 39 hexa en 37 hexa ?
En fait c'est tout simple. J'ai des fichiers qui commencent par la chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7 pour donner GIF87a. Je suppose que sed a des chances d'y arriver, mais je crains un bug du fait que le reste du contenu est du binaire (pour ceux qui n'auraient pas deviné, ce sont des images GIF).
Je viens de trouver une idée, mais je ne sais pas si c'est la meilleure :
En fait c'est tout simple. J'ai des fichiers qui commencent par la
chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7
pour donner GIF87a. Je suppose que sed a des chances d'y arriver,
mais je crains un bug du fait que le reste du contenu est du binaire
(pour ceux qui n'auraient pas deviné, ce sont des images GIF).
Je viens de trouver une idée, mais je ne sais pas si c'est la
meilleure :
En fait c'est tout simple. J'ai des fichiers qui commencent par la chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7 pour donner GIF87a. Je suppose que sed a des chances d'y arriver, mais je crains un bug du fait que le reste du contenu est du binaire (pour ceux qui n'auraient pas deviné, ce sont des images GIF).
Je viens de trouver une idée, mais je ne sais pas si c'est la meilleure :
Olivier Miakinen , dans le message <jmpjdf$289i$, a écrit :
En fait c'est tout simple. J'ai des fichiers qui commencent par la chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7 pour donner GIF87a.
Olivier Miakinen , dans le message <jmpjdf$289i$1@cabale.usenet-fr.net>,
a écrit :
En fait c'est tout simple. J'ai des fichiers qui commencent par la
chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7
pour donner GIF87a.
Olivier Miakinen , dans le message <jmpjdf$289i$, a écrit :
En fait c'est tout simple. J'ai des fichiers qui commencent par la chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7 pour donner GIF87a.
En fait c'est tout simple. J'ai des fichiers qui commencent par la chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7 pour donner GIF87a.
En fait c'est tout simple. J'ai des fichiers qui commencent par la
chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7
pour donner GIF87a.
En fait c'est tout simple. J'ai des fichiers qui commencent par la chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7 pour donner GIF87a.
Le 19/04/2012 20:25, Nicolas George m'a répondu : > >> En fait c'est tout simple. J'ai des fichiers qui commencent par la >> chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7 >> pour donner GIF87a. > > echo 7 | dd bs=1 count=1 seek=4 conv=notrunc of=fichier.gif
Pas mal ! Et j'imagine que l'une des deux commandes suivantes devrait fonctionner tout aussi bien :
Le 19/04/2012 20:25, Nicolas George m'a répondu :
>
>> En fait c'est tout simple. J'ai des fichiers qui commencent par la
>> chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7
>> pour donner GIF87a.
>
> echo 7 | dd bs=1 count=1 seek=4 conv=notrunc of=fichier.gif
Pas mal ! Et j'imagine que l'une des deux commandes suivantes devrait
fonctionner tout aussi bien :
Le 19/04/2012 20:25, Nicolas George m'a répondu : > >> En fait c'est tout simple. J'ai des fichiers qui commencent par la >> chaîne GIF89a (en ASCII) et je voudrais remplacer le 9 par par un 7 >> pour donner GIF87a. > > echo 7 | dd bs=1 count=1 seek=4 conv=notrunc of=fichier.gif
Pas mal ! Et j'imagine que l'une des deux commandes suivantes devrait fonctionner tout aussi bien :
Le 19/04/2012 21:20, je répondais à Stephane Chazelas :
printf GIF87a 1<> fichier.gif
Allons bon, voilà encore une syntaxe que je ne connaissais pas ! ;-)
C'est bon, j'ai trouvé. Cette syntaxe est valide dans tous les shells, y compris le bon vieux /bin/sh des familles ?
Stephane Chazelas
2012-04-19 21:31:37 +0200, Olivier Miakinen:
Le 19/04/2012 21:20, je répondais à Stephane Chazelas : >> >> printf GIF87a 1<> fichier.gif > > Allons bon, voilà encore une syntaxe que je ne connaissais pas ! ;-)
C'est bon, j'ai trouvé. Cette syntaxe est valide dans tous les shells, y compris le bon vieux /bin/sh des familles ?
Oui, à moins que tu ne veuilles remonter avant le Bourne shell (1979). Ce n'est valide que dans la famille de shells Bourne (Bourne, bash, ksh, ash, zsh...), pas dans les familles csh ou rc.
-- Stephane
2012-04-19 21:31:37 +0200, Olivier Miakinen:
Le 19/04/2012 21:20, je répondais à Stephane Chazelas :
>>
>> printf GIF87a 1<> fichier.gif
>
> Allons bon, voilà encore une syntaxe que je ne connaissais pas ! ;-)
C'est bon, j'ai trouvé. Cette syntaxe est valide dans tous les shells,
y compris le bon vieux /bin/sh des familles ?
Oui, à moins que tu ne veuilles remonter avant le Bourne shell
(1979). Ce n'est valide que dans la famille de shells Bourne
(Bourne, bash, ksh, ash, zsh...), pas dans les familles csh ou
rc.
Le 19/04/2012 21:20, je répondais à Stephane Chazelas : >> >> printf GIF87a 1<> fichier.gif > > Allons bon, voilà encore une syntaxe que je ne connaissais pas ! ;-)
C'est bon, j'ai trouvé. Cette syntaxe est valide dans tous les shells, y compris le bon vieux /bin/sh des familles ?
Oui, à moins que tu ne veuilles remonter avant le Bourne shell (1979). Ce n'est valide que dans la famille de shells Bourne (Bourne, bash, ksh, ash, zsh...), pas dans les familles csh ou rc.
-- Stephane
Olivier Miakinen
Le 19/04/2012 22:12, Stephane Chazelas a écrit :
>> >> printf GIF87a 1<> fichier.gif
Cette syntaxe est valide dans tous les shells, y compris le bon vieux /bin/sh des familles ?
Oui, à moins que tu ne veuilles remonter avant le Bourne shell (1979).
Non, ça me va. :-)
Même si mon besoin est dû à un logiciel trop vieux pour lire le format GIF89, le shell est bien plus récent que ça sur toutes les machines.
Ce n'est valide que dans la famille de shells Bourne (Bourne, bash, ksh, ash, zsh...), pas dans les familles csh ou rc.
Cela va de soi. Personne chez nous n'est maso au point d'écrire des scripts en csh !
Encore merci.
Cordialement, -- Olivier Miakinen
Le 19/04/2012 22:12, Stephane Chazelas a écrit :
>>
>> printf GIF87a 1<> fichier.gif
Cette syntaxe est valide dans tous les shells,
y compris le bon vieux /bin/sh des familles ?
Oui, à moins que tu ne veuilles remonter avant le Bourne shell
(1979).
Non, ça me va. :-)
Même si mon besoin est dû à un logiciel trop vieux pour lire le format
GIF89, le shell est bien plus récent que ça sur toutes les machines.
Ce n'est valide que dans la famille de shells Bourne
(Bourne, bash, ksh, ash, zsh...), pas dans les familles csh ou
rc.
Cela va de soi. Personne chez nous n'est maso au point d'écrire des
scripts en csh !
Cette syntaxe est valide dans tous les shells, y compris le bon vieux /bin/sh des familles ?
Oui, à moins que tu ne veuilles remonter avant le Bourne shell (1979).
Non, ça me va. :-)
Même si mon besoin est dû à un logiciel trop vieux pour lire le format GIF89, le shell est bien plus récent que ça sur toutes les machines.
Ce n'est valide que dans la famille de shells Bourne (Bourne, bash, ksh, ash, zsh...), pas dans les familles csh ou rc.
Cela va de soi. Personne chez nous n'est maso au point d'écrire des scripts en csh !
Encore merci.
Cordialement, -- Olivier Miakinen
Olivier Miakinen
Le 19/04/2012 20:06, je me répondais :
[...] Je suppose que sed a des chances d'y arriver, mais je crains un bug du fait que le reste du contenu est du binaire (pour ceux qui n'auraient pas deviné, ce sont des images GIF).
Je viens de trouver une idée, mais je ne sais pas si c'est la meilleure :
Pour info, cette idée d'utiliser 'cut' était encore pire que celle de chosir 'sed', pour la même raison : au moindre caractère n rencontré c'est la catastrophe.
Le 19/04/2012 20:06, je me répondais :
[...] Je suppose que sed a des chances d'y arriver,
mais je crains un bug du fait que le reste du contenu est du binaire
(pour ceux qui n'auraient pas deviné, ce sont des images GIF).
Je viens de trouver une idée, mais je ne sais pas si c'est la
meilleure :
Pour info, cette idée d'utiliser 'cut' était encore pire que celle de
chosir 'sed', pour la même raison : au moindre caractère n rencontré
c'est la catastrophe.
[...] Je suppose que sed a des chances d'y arriver, mais je crains un bug du fait que le reste du contenu est du binaire (pour ceux qui n'auraient pas deviné, ce sont des images GIF).
Je viens de trouver une idée, mais je ne sais pas si c'est la meilleure :
Pour info, cette idée d'utiliser 'cut' était encore pire que celle de chosir 'sed', pour la même raison : au moindre caractère n rencontré c'est la catastrophe.
Hugues
Ce cher Olivier Miakinen <om+ a posté :
Cela va de soi. Personne chez nous n'est maso au point d'écrire des scripts en csh !
Aaah, [t]csh... Le shell qui m'a appris à utiliser ypchsh :-)