remplacer un caractère spécial en utilisant son code ascii [ sed ]

remplacer un caractère spécial en utilisant son code ascii [ sed ] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 16-07-2003 à 13:36:55    

J'ai des fichiers de données (type texte ascii) qui se sont mis du jour au lendemain à contenir le caractère <del> (code 7F en hexa et qui a le bon goût de ne pas être imprimable) disséminé un peu partout (je sais pas ce qui a été bidouillé sur le prog d'acquisition, mais passons).
 
j'aimerais, vous l'avez compris virer ce satané caractère à chacune de ses occurrences et le remplacer par une espace ou rien du tout, car ça fout le bordel dans mes modules d'imports.
 
Mais comment faire pour fournir un numéro de caractère dans une expression rationnelle ?
 
en gros faudrait touver un moyen de faire ça :
 
 

Code :
  1. sed 's/le_caractère_en_question//g' fichier.in > fichier.out

 
 
toute suggestion est la bienvenue, même si elle n'utilise pas sed.
 
Mais j'ai pas envie et pas le temps de tout virer à la main une par une. :pt1cable:
 
edit :
 
pourquoi sed 's-\x7F--' input_file ne marche pas chez moi alors que ça fonctionne chez -+ ?


Message édité par FlamM le 17-07-2003 à 11:23:09

---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 16-07-2003 à 13:36:55   

Reply

Marsh Posté le 16-07-2003 à 13:53:14    

sed 's-\x7F--' input_file

Reply

Marsh Posté le 16-07-2003 à 13:56:46    

tr -d '\177' < fichier.in > fichier.out

Reply

Marsh Posté le 16-07-2003 à 14:19:15    

merci HNO3, ta solution fonctionne :)  
 
Désolé -+ mais j'avais déjà testé ta solution, et ça ne donne rien :(


---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 16-07-2003 à 14:22:38    

FlamM a écrit :

merci HNO3, ta solution fonctionne :)  
 
Désolé -+ mais j'avais déjà testé ta solution, et ça ne donne rien :(  


[pts/2][14:26]manu@bassed6:~/temp> hexdump -C truc  
00000000  74 6f 74 6f 7f 74 61 74  61 0a                    |toto.tata.|
0000000a
[pts/2][14:26]manu@bassed6:~/temp> sed "s-\x7F-@@@-" truc  
toto@@@tata
[pts/2][14:26]manu@bassed6:~/temp>  

Reply

Marsh Posté le 16-07-2003 à 14:39:34    

ben je comprends pas parce que ta solution -+ donne ça chez moi :
 
 


flamm@FarStar:/temp/test$ hexdump -C c6l1r50.in
00000000  50 52 50 37 7f 0d 20 20  20 37 3a 44 50 4c 20 58  |PRP7..   7:DPL X|
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 7f  |               .|
00000020  0d 20 20 20 20 20 44 50  52 20 47 20 20 20 20 20  |.     DPR G     |
00000030  20 20 20 20 20 20 20 20  20 20 7f 0d 20 20 20 20  |          ..    |
00000040  20 48 45 44 20 20 20 20  20 20 20 20 20 20 20 20  | HED            |
00000050  20 20 20 20 20 7f 0d 20  20 20 20 20 52 4f 46 20  |     ..     ROF |
00000060  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000070  7f 0d 20 20 20 20 20 53  41 4e 20 34 30 2e 30 30  |..     SAN 40.00|
00000080  30 20 20 20 20 20 20 20  20 20 20 7f 0d 20 20 20  |0          ..   |
00000090  20 20 49 4e 54 20 20 20  35 2e 30 30 20 20 20 20  |  INT   5.00    |
000000a0  20 20 20 20 20 20 7f 0d  20 20 20 20 20 53 54 50  |      ..     STP|
000000b0  20 20 30 2e 30 35 30 20  20 20 20 20 20 20 20 20  |  0.050         |
000000c0  20 7f 0d 20 20 20 20 20  53 53 43 20 38 30 2e 30  | ..     SSC 80.0|
000000d0  30 30 20 20 20 20 20 20  20 20 20 20 7f 0d 20 20  |00          ..  |
000000e0  20 20 20 53 41 4e 20 32  30 2e 30 30 30 20 20 20  |   SAN 20.000   |
000000f0  20 20 20 20 20 20 20 7f  0d 20 20 20 20 20 48 45  |       ..     HE|
00000100  44 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |D               |
00000110  20 20 7f 0d 20 20 20 20  20                       |  ..     |
00000119
flamm@FarStar:/temp/test$ sed "s-\x7f-@@@-" c6l1r50.in > c6l1r50.out
flamm@FarStar:/temp/test$ hexdump -C c6l1r50.out
00000000  50 52 50 37 7f 0d 20 20  20 37 3a 44 50 4c 20 58  |PRP7..   7:DPL X|
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 7f  |               .|
00000020  0d 20 20 20 20 20 44 50  52 20 47 20 20 20 20 20  |.     DPR G     |
00000030  20 20 20 20 20 20 20 20  20 20 7f 0d 20 20 20 20  |          ..    |
00000040  20 48 45 44 20 20 20 20  20 20 20 20 20 20 20 20  | HED            |
00000050  20 20 20 20 20 7f 0d 20  20 20 20 20 52 4f 46 20  |     ..     ROF |
00000060  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000070  7f 0d 20 20 20 20 20 53  41 4e 20 34 30 2e 30 30  |..     SAN 40.00|
00000080  30 20 20 20 20 20 20 20  20 20 20 7f 0d 20 20 20  |0          ..   |
00000090  20 20 49 4e 54 20 20 20  35 2e 30 30 20 20 20 20  |  INT   5.00    |
000000a0  20 20 20 20 20 20 7f 0d  20 20 20 20 20 53 54 50  |      ..     STP|
000000b0  20 20 30 2e 30 35 30 20  20 20 20 20 20 20 20 20  |  0.050         |
000000c0  20 7f 0d 20 20 20 20 20  53 53 43 20 38 30 2e 30  | ..     SSC 80.0|
000000d0  30 30 20 20 20 20 20 20  20 20 20 20 7f 0d 20 20  |00          ..  |
000000e0  20 20 20 53 41 4e 20 32  30 2e 30 30 30 20 20 20  |   SAN 20.000   |
000000f0  20 20 20 20 20 20 20 7f  0d 20 20 20 20 20 48 45  |       ..     HE|
00000100  44 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |D               |
00000110  20 20 7f 0d 20 20 20 20  20                       |  ..     |
00000119

 
 
 :??:


---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 16-07-2003 à 14:41:42    

par contre tr fonctionne impec :
 
 


flamm@FarStar:/temp/test$ tr -d '\177' < c6l1r50.in > c6l1r50.out
flamm@FarStar:/temp/test$ hexdump -C c6l1r50.out
00000000  50 52 50 37 0d 20 20 20  37 3a 44 50 4c 20 58 20  |PRP7.   7:DPL X |
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 0d 20  |              . |
00000020  20 20 20 20 44 50 52 20  47 20 20 20 20 20 20 20  |    DPR G       |
00000030  20 20 20 20 20 20 20 20  0d 20 20 20 20 20 48 45  |        .     HE|
00000040  44 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |D               |
00000050  20 20 0d 20 20 20 20 20  52 4f 46 20 20 20 20 20  |  .     ROF     |
00000060  20 20 20 20 20 20 20 20  20 20 20 20 0d 20 20 20  |            .   |
00000070  20 20 53 41 4e 20 34 30  2e 30 30 30 20 20 20 20  |  SAN 40.000    |
00000080  20 20 20 20 20 20 0d 20  20 20 20 20 49 4e 54 20  |      .     INT |
00000090  20 20 35 2e 30 30 20 20  20 20 20 20 20 20 20 20  |  5.00          |
000000a0  0d 20 20 20 20 20 53 54  50 20 20 30 2e 30 35 30  |.     STP  0.050|
000000b0  20 20 20 20 20 20 20 20  20 20 0d 20 20 20 20 20  |          .     |
000000c0  53 53 43 20 38 30 2e 30  30 30 20 20 20 20 20 20  |SSC 80.000      |
000000d0  20 20 20 20 0d 20 20 20  20 20 53 41 4e 20 32 30  |    .     SAN 20|
000000e0  2e 30 30 30 20 20 20 20  20 20 20 20 20 20 0d 20  |.000          . |
000000f0  20 20 20 20 48 45 44 20  20 20 20 20 20 20 20 20  |    HED         |
00000100  20 20 20 20 20 20 20 20  0d 20 20 20 20 20        |        .     |
0000010e
 

 
 
 
edit :
 
les version des fois que :
 
GNU sed version 3.02
tr (GNU textutils) 2.0


Message édité par FlamM le 16-07-2003 à 14:42:36

---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 17-07-2003 à 11:17:27    

Question :
 
pourquoi ça ne marche pas chez moi ?
 
sed 's-\x7F--' input_file
 
j'aimerais comprendre


---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 17-07-2003 à 11:33:44    

extrait de la FAQ de sed :
 


1.5. FAQ abbreviations:
 
   files = one or more filenames, separated by whitespace
   RE  = Regular Expressions supported by sed
   LHS = the left-hand side ("find" part) of "s/find/repl/" command
   RHS = the right-hand side ("replace" part) of "s/find/repl/" cmd.
 
[snip snip]
 
   LHS: In sed, the LHS may be a string literal (e.g., "foo" ) or any
   valid regular expression supported by your version of sed. Some
   versions of sed support things like \t for TAB, \r for carriage
   return, \xNN for direct entry of hex codes, etc. Other versions of
   sed do not support this syntax.
 


 
[:spamafote]
 
 
edit : j'ai la 4.0.7 de la debian


Message édité par minusplus le 17-07-2003 à 11:34:51
Reply

Marsh Posté le 17-07-2003 à 11:37:45    

ok ça explique bien des choses
 
merci beaucoup [:tkilla]


---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 17-07-2003 à 11:37:45   

Reply

Marsh Posté le 17-07-2003 à 11:37:54    

au pire, tu peux t'en tirer en échappant le DEL :
 


[pts/2][11:40]manu@bassed6:~/temp> hexdump -C truc  
00000000  74 6f 74 6f 7f 74 61 74  61 0a                    |toto.tata.|
0000000a
[pts/2][11:41]manu@bassed6:~/temp> sed 's!^?!@@@!' truc  
toto@@@tata
[pts/2][11:41]manu@bassed6:~/temp>  


 
le ^? dans la commande s de sed est le caractère DEL échappé par Bash. Pour l'obtenir : Ctrl-V puis Backspace.

Reply

Marsh Posté le 17-07-2003 à 11:50:20    

plutot utiliser tr dans ce genre de cas

Reply

Marsh Posté le 17-07-2003 à 11:51:51    

pour son cas, c'est sûr. le sed c'était juste
(1) pour le cas où il voudrait faire plus compliqué
(2) pour la culture gé ! :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed