Journal Sed ! Je craque

Posté par  (site web personnel) .
Étiquettes : aucune
0
11
mar.
2004
Bonjour, j'essaye en général de me débrouiller tout seul, lire la doc, etc...
mais là j'y arrive pas

Il y a un truc dont j'ai hypersouvent besoin, depuis que j'ai découvert les bases du shell (le for, awk, etc...) c'est de récupérer des noms avec des caractères spé et de rajouter des carac d'annulations

exemple type : des fichiers, des répertoires avec espaces,a ccents, etc...

Donc en gros personne n'a un script qui le fait ou des explications (parce que je voudrai comprendre qd même) ?

merci !
  • # Re: Sed ! Je craque

    Posté par  . Évalué à 1.

    iconv ?

    Je comprends pas trop ce que tu veux faire...
    ;-/
  • # Re: Sed ! Je craque

    Posté par  (site web personnel, Mastodon) . Évalué à 2.

    Peut être que tu devrais regarde du coté de la commande 'tr'. C'est un outil qui sert à remplacer des charactères par d'autre (ou à en supprimer).
  • # Re: Sed ! Je craque

    Posté par  . Évalué à 2.

    Ben pour récupérer les fichiers avec des caractères spéciaux, tu peux déjà utiliser un truc style

    ls *[àâéêèïÎç]*

    Ensuite pour sed, le plus simple c'est le substitute:

    sed -e "s/Salut/Hello/g"

    Tu peux aussi utiliser la commande "y", spécifique au sed de GNU, je crois, et qui fait une transofrmation respective:

    sed -e "y/abcde/fghij/"

    transformera tous les "a" en "e", les "b" en "f", etc.
  • # Re: Sed ! Je craque

    Posté par  . Évalué à 0.

    Tu auras ci dessous un exemple de script permettant de passer les noms de fichiers de majuscules en minuscules.
    J'espère que cela t'aidera :)

    #!/bin/sh
    # Lorsqu'on télécharge des fichiers HOST, on se retrouve avec des fichiers
    # dont le nom est en majuscule. Ce script permet de renommer les fichiers
    # passés à la ligne de commande pour qu'ils soient en minuscules.
    #
    # ex d'utilisation
    # ----------------
    # find . -name "*.[C|H]" | xargs majToMin.sh

    for fichier in $*
    do
    nouvNom=$(echo $fichier | sed -e "s/A/a/g;\
    s/B/b/g; \
    s/C/c/g; \
    s/D/d/g; \
    s/E/e/g; \
    s/F/f/g; \
    s/G/g/g; \
    s/H/h/g; \
    s/I/i/g; \
    s/J/j/g; \
    s/K/k/g; \
    s/L/l/g; \
    s/M/m/g; \
    s/O/o/g; \
    s/P/p/g; \
    s/Q/q/g; \
    s/R/r/g; \
    s/S/s/g; \
    s/T/t/g; \
    s/U/u/g; \
    s/V/v/g; \
    s/W/w/g; \
    s/X/x/g; \
    s/Y/y/g; \
    s/Z/z/g; ")

    mv $fichier $nouvNom
    done
    • [^] # Re: Sed ! Je craque

      Posté par  . Évalué à 5.

      gni ?

      tr A-Z a-z ?

      La gent féminine, pas la "gente", pas de "e" ! La gent féminine ! Et ça se prononce comme "gens". Pas "jante".

      • [^] # Re: Sed ! Je craque

        Posté par  . Évalué à 1.

        exact ... je ne connaissais par tr :)

        #!/bin/sh
        # Lorsqu'on télécharge des fichiers HOST, on se retrouve avec des fichiers
        # dont le nom est en majuscule. Ce script permet de renommer les fichiers
        # passés à la ligne de commande pour qu'ils soient en minuscules.
        #
        # ex d'utilisation
        # ----------------
        # find . -name "*.[C|H]" | xargs majToMin.sh

        for fichier in $*
        do
        nouvNom=$(echo $fichier | tr A-Z a-z)
        mv $fichier $nouvNom
        done
        • [^] # Re: Sed ! Je craque

          Posté par  . Évalué à 1.

          J'ai une question au sujet du script : à quoi sert le "$" dans "for fichier in $*" ?
          • [^] # Re: Sed ! Je craque

            Posté par  . Évalué à 1.

            J'ai une question au sujet du script : à quoi sert le "$" dans "for fichier in $*" ?

            $* représente la totalité des arguments passés au script. Donc, si tu lances
            ./machin.sh fichier1 fichier2 fichier3
            fichier prendra la valeur fichier1, puis fichier2 etc...
            • [^] # Re: Sed ! Je craque

              Posté par  . Évalué à 1.

              Merci, je connaissais ça avec $@.
              Je viens de voir dans la page man de bash (je sais, j'aurais pu le faire avant de poser la question) et c'est vrai que je me sert peut-être souvent de $@ au lieu de $*.
        • [^] # Re: Sed ! Je craque

          Posté par  . Évalué à 1.

          Marche pas pour une liste de fichiers avec des espace :

          $ ./a My\ Documents My\ Music
          mv: ne peut évaluer `My': No such file or directory
          mv: ne peut évaluer `Documents': No such file or directory
          mv: ne peut évaluer `My': No such file or directory
          mv: ne peut évaluer `Music': No such file or directory
          • [^] # Re: Sed ! Je craque

            Posté par  . Évalué à 1.

            aarrgg... Exact :)
            N'ayant pas l'habitude d'utiliser les espaces dans les noms de fichiers (chose que je trouve stupide de faire), je n'ai pas prévu ce cas (même si on peut toujours faire un ./a "Mon fichier a moi").

            En route pour la modif :)
          • [^] # Re: Sed ! Je craque

            Posté par  . Évalué à 1.

            ceci devrait corriger le pb. le "$@" permet de traiter les parametres sans couper sur les blancs et le "$fichier" (noter les quotes en plus) fait de meme.

            j'ai aussi utilisé les classes upper et lower de tr, pour une plus grande compatibilité, notamment avec les lettres majuscules accentuées.

            si j'ai rien loupé, ca marche.

            -8<----------------8<-----------------8<-------------
            #!/bin/sh
            # Lorsqu'on télécharge des fichiers HOST, on se retrouve avec des fichiers
            # dont le nom est en majuscule. Ce script permet de renommer les fichiers
            # passés à la ligne de commande pour qu'ils soient en minuscules.
            #
            # ex d'utilisation
            # ----------------
            # find . -name "*.[C|H]" | xargs majToMin.sh

            for fichier in "$@"; do
            nouvNom=$(echo "$fichier" | tr [:upper:] [:lower:])
            mv "$fichier" "$nouvNom"
            done
            -8<----------------8<-----------------8<-------------
      • [^] # Re: Sed ! Je craque

        Posté par  . Évalué à 1.

        gni ?

        tr [:upper:] [:lower:]
    • [^] # Re: Sed ! Je craque

      Posté par  . Évalué à 2.

      t'as oublié le N -> n dans ton script
  • # Re: Sed ! Je craque

    Posté par  . Évalué à 4.

    sed, c'est dien

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.