[gull] Batch edit des fichiers binaires

Félix Hauri felix at f-hauri.ch
Fri Oct 5 09:59:35 CEST 2007


On Fri, Oct 05, 2007 at 12:38:21AM +0200, Lloyd Dizon wrote:
> 
> Il devrait y avoir malentendu. Par BATCH, je voulais dire en groupe.
Ok, comprend mieux...

> ...
> sed 's/tata/TOTO/' < texte.txt > texte.txt # pas possible !
Si!

$ sed 's/tata/TOTO/' -i texte.txt
ou
$ sed 's/tata/TOTO/' --in-place texte.txt


> Il faut faire:
> sed 's/tata/TOTO/' < texte.txt > texte.tmp
> mv texte.tmp texte.txt
Pour éviter cela, il m'est arrivé de faire:

$ sed 's/tata/TOTO/' < texte.txt | diff -u texte.txt - | patch p0

Je l'ai fait avec des gros fichiers...
pas très élégant mais fonctionnel.

M'enfin cela ne résoud pas le problème ``binaire''.

> ...

> Bref, je voulais faire une substitution du code binaire dans un
> fichier par une autre "chaine binaire", en utilisant un ed version
> binaire (s'il un tel programme existait).

Selon la nature de ta modif, (si la taille du binaire change ou non,
si les remplacement sont légers, si les chaines contiennent de l'ascii
ou des caractères de control, etc)
p. ex, si ta modif est purement ascii et que tu ne change pas la taille
de ton fichier, vi peut le faire:
 $ ls -l test.jpg 
 -rw-r--r-- 1 felix felix 363907 2007-10-05 09:38 test.jpg
 $ jpegtopnm <test.jpg | pnmfile && echo OK.
 jpegtopnm: WRITING PPM FILE
 stdin:  PPM raw, 1280 by 960  maxval 255
 OK.
 $ rdjpgcom test.jpg 
 CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
 $ sed -i test.jpg -e \
   s'/gd-jpeg v1.0 (using IJG JPEG v62)/Myself with my head and my hands /'
 $ ls test.jpg 
 -rw-r--r-- 1 felix felix 363907 2007-10-05 09:56 test.jpg
 $  jpegtopnm <test.jpg | pnmfile && echo OK.
 jpegtopnm: WRITING PPM FILE
 stdin:  PPM raw, 1280 by 960  maxval 255
 OK.
 $ rdjpgcom test.jpg
 CREATOR: Myself with my head and my hands , default quality

Ça marche, mais il s'agit d'un cas particulier...

Par ailleur, j'ai égallement déjà utilisé VI pour des petites
modifications sur des fichiers binaires avec de bons résultats,
mais je ne l'ai jamais fait en ``batch mode''.

> Donc:
> ed = line editor
> sed = stream editor
> bed (binary ed) = block editor ??
et aussi:
$ apt-cache search editor | grep -i 'binary\|hex' 
bbe - sed-like editor for binary files
beav - binary editor and viewer
biew - console hex viewer/editor with disassembler
bvi - binary file editor
ghex - GNOME Hex editor for files
hexcurse - A ncurses-based hex editor with many features
hexer - An interactive binary editor with a Vi-like interface
khexedit - KDE hex editor
le - Text Editor with block and binary operations
libgtkhex0 - GNOME Hex editor for files (shared library)
libgtkhex0-dev - GNOME Hex editor for files (development headers)
ncurses-hexedit - Edit files/disks in hex, ASCII and EBCDIC
vche - Virtual Console Hex Editor
xemacs21-gnome-mule - highly customizable text editor -- Mule binary

Tiens, peut-être que bbe:
Description: sed-like editor for binary files
 Editor like sed, but for binary files. bbe performs basic byte
 operations on blocks of input stream. bbe is a command line tool
 developed for Unix systems.
 .
  Homepage: http://members.surfeu.fi/tjsa/bbe/


> ...
> J'espère maintenant que tu as compris ma question,
Oui, un poil mieux.

> je poste le code en Perl sinon (aïe).
Volontier!
(A mon adresse perso, si tu préfères;)

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch



More information about the gull mailing list