[Unix] char chain

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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    essaie avec
    perl -pi.orig -e 's/(t=\")0+(\..*)/$1$2/' fichier 
    1. 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 ^-_-^
      1. Modérateur
        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 ?
        1. Modérateur
          on peut avoir par exemple
          000.000.000.111
          000.000.111....

          ?

          donc il faut traiter plusieurs cas?

          1. 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);
            }
            1. Modérateur
              Très bien :-))
              Il fait combien de lignes ton fichier de 45 Mo?
              1. Modérateur
                veux tu compresser ton fichier et le mettre sur cjoint.com?
                Merci.
                1. 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 ..
                  1. Modérateur
                    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