Pages : 1
#1 Le 03/07/2012, à 08:19
- ar barzh paour
[Résolu] suppression 0A
bonjour à tous
1-je cherche à supprimer tous les caractères hexadécimal 0A d'un fichier
est-ce possible avec une commande unix read, write sed autre ?
je ne comprends pas la syntaxe de read et write
2- de même je cherche à remplacer les octets ZZ (5A 5A) par 0D 0A
(le fichier n'est pas un fichier texte)
Dernière modification par ar barzh paour (Le 03/07/2012, à 10:54)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#2 Le 03/07/2012, à 08:52
- Bousky
Re : [Résolu] suppression 0A
read sert à lire un fichier ligne par ligne, mais il peut opérer des transformation sur ce qu'il lit (par exemple interpréter des caractères d’échappement). Dans ton cas il faut mieux utiliser la commande line. write sert à envoyer des messages aux autre utilisateurs, rien à voir avec ton problème ; utilise echo pour écrire (ou printf, mais c'est rarement nécessaire). sed travaille ligne par ligne, or 0A est justement le saut de ligne, donc il n'est pas utilisable pour le supprimer.
1) À utiliser avec un fichier source et un fichier destination différents :
while line=$(line) ; do echo -n "$line" ; done < source > destination
2) Là on peut utiliser sed, mais il faut générer le caractère 0D (avec echo) :
sed -i "s/ZZ/$(echo -e "\x0d")\n/g" fichier
Pour avoir deux fichiers différents :
sed "s/ZZ/$(echo -e "\x0d")\n/g" source > destination
Il est possible de faire les deux en une ligne :
while line=$(line) ; do echo -n "$line" ; done < source | sed "s/ZZ/$(echo -e "\x0d")\n/g" > destination
Ne remplace pas directement ton fichier, on sait jamais
Sous Linux, il n'y a pas de différence entre fichier texte et binaire, si ce n'est que tous les programmes ne se comportent pas de la même manière avec un fichier qui ne contient pas que du texte (gedit refuse de les ouvrir, less affiche les codes hexa, cat les vomit à l'écran, …)
Dernière modification par Bousky (Le 03/07/2012, à 08:58)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#3 Le 03/07/2012, à 09:11
- ar barzh paour
Re : [Résolu] suppression 0A
merci pour cette réponse rapide
la commande while line ......ne fonctionne pas je creuse un peu
while line=$(line) ; do echo -n "$line" ; done < extractl > e1
No command 'line' found, did you mean:
Command 'pline' from package 'libxgks-dev' (universe)
Command 'wine' from package 'wine1.4-i386' (universe)
Command 'lire' from package 'lire' (universe)
Command 'lie' from package 'lie' (universe)
Command 'link' from package 'coreutils' (main)
Command 'xine' from package 'xine-ui' (universe)
line: command not found
j'ai essayé avec bash ( le fichier sup_0a contient while line .....)
c'est la même chose
bash sup_0a
sup_0a: ligne 2: line : commande introuvable
je vais essayer avec awk
par contre
la commande sed .... source >destination fonctionne très bien
Dernière modification par ar barzh paour (Le 03/07/2012, à 09:26)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#4 Le 03/07/2012, à 09:37
- Bousky
Re : [Résolu] suppression 0A
Apparemment ils ont décidé de supprimer line dans les nouvelles version d'ubuntu… Essaie de remplacer « line=$(line) » par « read -r line ».
j'ai essayé avec bash (le fichier sup_0a contient while line …)
Le terminal, c'est bash
Dernière modification par Bousky (Le 03/07/2012, à 09:38)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#5 Le 03/07/2012, à 09:39
- pingouinux
Re : [Résolu] suppression 0A
Bonjour,
Autre façon de faire :
tr -d $'\x0a' <source | sed "s/ZZ/\x0d\x0a/g" >destination
Hors ligne
#6 Le 03/07/2012, à 09:41
- Bousky
Re : [Résolu] suppression 0A
tr -d $'\x0a' <source | sed "s/ZZ/\x0d\x0a/g" >destination
J'ai subitement l'impression de passer pour un con
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#7 Le 03/07/2012, à 09:54
- pingouinux
Re : [Résolu] suppression 0A
@Bousky #6 : Je ne comprends pas ta remarque. Il y a souvent de multiples solutions à un même problème, et ça laisse le choix.
Hors ligne
#8 Le 03/07/2012, à 10:06
- Bousky
Re : [Résolu] suppression 0A
Sauf que ma solution est inutilement compliquée.
Par contre, pourquoi tu as mis un « $ » dans le tr ?
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#9 Le 03/07/2012, à 10:34
- pingouinux
Re : [Résolu] suppression 0A
pourquoi tu as mis un « $ » dans le tr ?
Parce que je n'ai pas réussi autrement. Voici un extrait de man bash, rubrique QUOTING :
Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by the
ANSI C standard.
Hors ligne
#10 Le 03/07/2012, à 10:53
- ar barzh paour
Re : [Résolu] suppression 0A
bravo et merci à pingouinux et bousky
tr ..... me donne le résultat voulu
quand on voit la solution ça parait presque simple
je regarderai de plus près les commandes tr et bash
@ bousky
rmq j'avais essayé avec bash parce que je pensais qu'il pouvait y avoir une différence ente bash et sh dans mon cas
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#11 Le 03/07/2012, à 11:22
- Bousky
Re : [Résolu] suppression 0A
@pingouinux : Je ne savais pas… ça a l'air plus simple que de passer par echo
je pensais qu'il pouvait y avoir une différence ente bash et sh
Le shell par défaut sous Ubuntu est bash, pas sh. Et il est possible de passer une commande explicitement à bash sans utiliser de fichier : « bash -c 'commande' ».
Dernière modification par Bousky (Le 03/07/2012, à 11:24)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#12 Le 05/07/2012, à 17:43
- ar barzh paour
Re : [Résolu] suppression 0A
après lecture de man tr je pense que
tr -d '\n' <source >destination
doit aussi fonctionner pour supprimer les valeurs hexa 0A
\n est connu comme étant new line par tr ( et new line = 0a)
on peut supprimer une valeur en l'exprimant en octal
tr -d '\12' <source >destination
aurait donc le même résultat
par contre
tr -d \0A <source >destination
a pour conséquence de supprimer tous les caractères "0" et tous les caractères "A" du fichier ...
Dernière modification par ar barzh paour (Le 05/07/2012, à 17:59)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#13 Le 05/07/2012, à 17:56
- pingouinux
Re : [Résolu] suppression 0A
@ar barzh paour #12 : oui, c'est un peu plus simple que ce que je proposais.
Hors ligne
#14 Le 06/07/2012, à 17:07
- ar barzh paour
Re : [Résolu] suppression 0A
@ Bousky #11
AH AH !! j'ai cherché un script (un peu tordu je l'avoue) qui ne fonctionne ni en tapant ./script
xxx-yyy-desktop:~$ ./script
./script: 2: ./script: shopt: not found
xxx-yyy-desktop:~$
ni en tapant sh .script
xxx-yyy-desktop:~$ sh ./script
./script: 2: ./script: shopt: not found
xxx-yyy-desktop:~$
mais qui fonctionne en tapant bash ./script
xxx-yyy-desktop:~$ bash ./script
OK ça marche
xxx-yyy-desktop:~$
le script lui même
#!/bin/sh
shopt -s extglob
res=$?
if [ x$res = x0 ]
then
echo "OK ça marche"
fi
en tout cas merci pour les réponses qui me font découvrir syntaxe et commandes
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#15 Le 06/07/2012, à 17:53
- Bousky
Re : [Résolu] suppression 0A
xxx-yyy-desktop:~$ bash ./script
#!/bin/sh
Nan mais là tu triches : c'est un script bash, mais tu lui fait croire que c'est un script sh (shopt c'est du pur bash, donc #!/bin/bash)
Puisqu'on en est à pinailler, ça saymal©®™ :
shopt -s extglob
res=$?
if [ x$res = x0 ]
1) Il est possible d'utiliser directement « $? », pas besoin de « $res » ;
2) Les « x » dans le test ne servent à rien, si tu as peur que la variable soit vide mets des guillemets doubles, ça te sauveras aussi d'un bug si elle contient un espace ;
3) « [ » n'est rien de plus qu'une commande, tu peux en utiliser une autre à la place (par exemple shopt )
On écrit donc :
shopt -s extglob
if [ $? = 0 ]
voire mieux :
if shopt -s extglob
Voilà comment j'écrirais ton script :
#!/bin/bash
shopt -s extglob && echo OK ça marche
Dernière modification par Bousky (Le 06/07/2012, à 17:55)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#16 Le 06/07/2012, à 18:27
- ar barzh paour
Re : [Résolu] suppression 0A
c'était pour rire bien sur
je ne fais que marcher sur la pointe des pieds avec toutes ces commandes et syntaxes et souvent je ressort de ma mémoire des souvenirs de quelques dizaines d'années ... au temps où le PC n'existait pas encore ...
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
Pages : 1