• [^] # Re: Y a pas que Bash dans la vie

    Posté par . En réponse au journal Un meilleur shell. Évalué à 0.

    Pour grep, il est souvent possible de s'en passer quand il sagit seulement
    de savoir si (une ligne, un mot, un process) est présent:


    a=`<fichier.txt`
    [ "${a//michu/}" != "${a}" ] && echo "MATCH" || echo "MATCH PAS"


    C'est nettement plus rapide que:

    cat fichier.txt | grep michu
    [ "$?" == "0" ] && echo "MATCH" || echo "MATCH PAS"



    Mais c'est dangereux si le fichier est gros.

    Pour traiter un fichier ligne par ligne:

    exec 3<fichier.txt
    while read -u 3 line ; do
    echo "${line}"
    # Traitement
    done
    exec 3>&-


    C'est plus rapide que:

    function processLines() {
    local line
    while read line ; do
    echo "${line}"
    done
    }
    cat fichier.txt | processLines



    Il y a pas mal de bidouilles pour gagner en perfs, par exemple avec
    les trucs décrits dans la section 'Parameter Expansion' on peut couvrir
    pas mal de cas en ce qui concerne le traitement de chaines de caractères.