[Unix] char chain

nono -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Hi all,

Je viens de passer ma nuit à chercher comment gérer les chaines de caractères en bash, ça commence à me sortir par les yeux, je m'adresse donc à vous ;)

disons que j'ai :
t="001.023.103.120"

Là dedans, je veux faire quelque chose qui va me supprimer les 0 inutile dans cette ip.

Au final je veux avoir :
t="1.23.103.120"

Je pourrais le faire à la main c'est vrai, sauf que le fichier fait quelques 45 Mo donc bon ^^
J'ai essayé awk sans grande réussite je l'avoue.

Voilà merci pr l'aide ;)

10 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    essaie avec
    perl -pi.orig -e 's/(t=\")0+(\..*)/$1$2/' fichier 
    0
  2. nono
     
    arnaud@unix-powa:~/Desktop$ perl -pi.orig -e 's/(t=\")0+(\..*)/$1$2/' a
    arnaud@unix-powa:~/Desktop$ cat a
    000.000.000.000
    003.255.255.255
    004.000.025.146

    nothing ^-_-^
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    C'est normal, tu as dit

    disons que j'ai :
    t="001.023.103.120"


    par exemple il faut supprimer tout si on a 000.000.000.000 ?
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    on peut avoir par exemple
    000.000.000.111
    000.000.111....

    ?

    donc il faut traiter plusieurs cas?

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nono
     
    en fait, j'me suis décidé à le coder en C, et d'un coup ça va plus vite ..
    bon c fait en 5min hein ^-_-^
    merci qd même pr l'aide

    #include <stdio.h>

    int main(void)
    {
    char filename[10];
    int n,readend;
    FILE * input;
    printf("nom du file : ");
    scanf("%9s",filename);
    input=fopen(filename,"r");
    int i=1,j=2;
    do
    {
    readend=fscanf(input,"%d",&n);
    if (readend==1)
    {
    if (i==4)
    {
    if (j!=2)
    {
    printf("%d\n",n);
    j++;
    } else {
    printf("%d-",n);
    j=1;
    }
    i=0;
    } else {
    printf("%d.",n);
    }
    }
    i++;
    }
    while (readend==1 && fgetc(input)!=EOF);
    fclose(input);
    }
    0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Très bien :-))
    Il fait combien de lignes ton fichier de 45 Mo?
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    veux tu compresser ton fichier et le mettre sur cjoint.com?
    Merci.
    0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    j'me suis décidé à le coder en C, et d'un coup ça va plus vite .

    je voulais voir ton fichier puisque 5 minutes me semble beaucoup
    ici fichiers texte en perl#2007 02 19%2020%3A15%3A18 je traite 2 fichiers (chaque de 2 millions lignes) en 13 secondes
    0
  10. nono
     
    salut,

    désolé je viens de voir ton post
    je disais "5min" pour coder le script lol, pas pour le traiter ;)

    au niveau du fichier, ce sont des bad ip provenant de http://www.bluetack.info/nipfilter.dat.gz ainsi qu'une liste de bad sites (j'ai plus le site en tête là), une liste d'ip locales, etc ..
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Ah, d'accord.
      Je préfère quand même les regex quand il s'agit de traitement de chaînes de caractères :-))

      bonne continuation
      0