• [^] # Re: Formation

    Posté par . En réponse à la dépêche systemd pour les administrateurs, partie 1 et 2. Évalué à 9. Dernière modification le 06 août 2014 à 23:46.

    Il y a quand même pleins de façon plus lisibles de faire ça :

    sed 's@.*/\([^/]\+\)/\([^/]\+\)@&|1円-2円@' # version sed
    awk -F/ '{print 0ドル"|"$(NF-1)"-"$NF}' # version awk
    # version pure shell
    while read line ; do
     project=${line##*/}
     usr=${line%/*}
     usr=${usr##*/}
     echo "${line}|$usr-$project"
    done
    # version zsh
    while read ; do
     tab=( "${(s:/:)REPLY}" )
     echo "${REPLY}|${(j:-:)tab[${#tab[@]}-1,${#tab[@]}]}"
    done

    Ma version sed, demande à connaître les expressions régulières ce qui est largement plus courant que le langage sed et qui est plus visuel aussi.

    La version awk (la plus lisible des 4 AMHA) demande à savoir comment fonctionne awk (-F pour découper les lignes et le bloc s'execute pour chaque ligne).

    La version zsh consiste à découper la ligne sur les / et à concaténer les deux derniers éléments avec un - (c'est l'opérateur j pour join).

    Il y a, je pense, 4 façons générales de le faire :

    • la tienne que je comprends pas (je connais pas le sed)
    • les expressions régulières (ma version sed, plus ou moins la version shell)
    • le découpage sur les / (les versions awk et zsh)
    • dans les langages évolués interpréter l'ensemble comme un chemin de fichier et le manipuler par exemple en Java :
    while (scanner.hasNextLine()) {
     Path p = Paths.get(scanner.nexLine());
     System.out.println(String.format("%s|%s-%s", p.toString(),
     p.getParent().getName().toString(),
     p.getName().toString()));
    }

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)