Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink

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 ».


ar barzh paour a écrit :

j'ai essayé avec bash (le fichier sup_0a contient while line …)

Le terminal, c'est bash tongue

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

pingouinux a écrit :
tr -d $'\x0a' <source | sed "s/ZZ/\x0d\x0a/g" >destination

J'ai subitement l'impression de passer pour un con roll lol


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

Bousky #8 a écrit :

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 tongue


ar barzh paour a écrit :

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

ar barzh paour a écrit :
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 tongue (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 tongue)

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