Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Opérations de chaîne

Il existe un grand nombre d'extensions qui peuvent être utilisées pour opérer sur des chaînes. Beaucoup de ces extensions sont particulièrement bien adaptées aux opérations sur les noms de chemin.

${#paramètre}

se développe dans la longueur de la chaîne contenue par paramètre. Normalement, paramètre est une chaîne ; Toutefois, si paramètre est soit @ or *, alors l'expansion donne le nombre de paramètres de position.



[moi@linuxbox ~]$ foo="Cette chaîne est longue."

[moi@linuxbox ~]$ echo "'$foo' contient ${#foo} caractères."

'Cette chaîne est longue.' comporte 20 caractères.

[moi@linuxbox ~]$ foo="Cette chaîne est longue."

[moi@linuxbox ~]$ echo "'$foo' contient ${#foo} caractères."

'Cette chaîne est longue.' comporte 20 caractères.


${paramètre:compenser}

${paramètre:compenser:longueur}

Ces expansions sont utilisées pour extraire une partie de la chaîne contenue dans paramètre. L'extraction commence à compenser caractères depuis le début de la chaîne et se poursuit jusqu'à la fin de la chaîne, à moins que le longueur est spécifié.


[moi@linuxbox ~]$ foo="Cette chaîne est longue."

[moi@linuxbox ~]$ écho ${foo:5}

la chaîne est longue.

[moi@linuxbox ~]$ écho ${foo:5:6}

un magnifique

[moi@linuxbox ~]$ foo="Cette chaîne est longue."

[moi@linuxbox ~]$ écho ${foo:5}

la chaîne est longue.

[moi@linuxbox ~]$ écho ${foo:5:6}

un magnifique


Si la valeur de compenser est négatif, cela signifie qu'il commence à la fin de la chaîne plutôt qu'au début. Notez que les valeurs négatives doivent être précédées d'un espace pour éviter toute confusion avec le ${paramètre:-mot} vous propose d’explorer. longueur, s'il est présent, ne doit pas être inférieur à zéro.

If paramètre is @, le résultat de l'expansion est longueur paramètres de position, à partir de

décalage.



[moi@linuxbox ~]$ foo="Cette chaîne est longue."

[moi@linuxbox ~]$ echo ${foo : -5}

longtemps.

[moi@linuxbox ~]$ echo ${truc : -5:2}

lo

[moi@linuxbox ~]$ foo="Cette chaîne est longue."

[moi@linuxbox ~]$ echo ${foo : -5}

longtemps.

[moi@linuxbox ~]$ echo ${truc : -5:2}

lo


${paramètre#modèle}

${paramètre##modèle}

Ces extensions suppriment une première partie de la chaîne contenue dans paramètre Défini par modèle. modèle est un modèle générique comme ceux utilisés dans l'expansion des noms de chemin. La différence entre les deux formes est que le # forme supprime la correspondance la plus courte, tandis que la ## formulaire supprime la correspondance la plus longue.



[moi@linuxbox ~]$ foo=fichier.txt.zip [moi@linuxbox ~]$ écho ${foo#*.} txt.zip

[moi@linuxbox ~]$ écho ${foo##*.}

Zip *: français

[moi@linuxbox ~]$ foo=fichier.txt.zip [moi@linuxbox ~]$ écho ${foo#*.} txt.zip

[moi@linuxbox ~]$ écho ${foo##*.}

Zip *: français


${paramètre%modèle}

${paramètre%%modèle}

Ces extensions sont les mêmes que les # et de ## développements ci-dessus, sauf qu'ils suppriment le texte de la fin de la chaîne contenue dans paramètre plutôt que depuis le début.



[moi@linuxbox ~]$ foo=fichier.txt.zip

[moi@linuxbox ~]$ foo=fichier.txt.zip


[moi@linuxbox ~]$ écho ${foo%.*}

fichier.txt

[moi@linuxbox ~]$ écho ${foo%%.*}

filet

[moi@linuxbox ~]$ écho ${foo%.*}

fichier.txt

[moi@linuxbox ~]$ écho ${foo%%.*}

filet


${paramètre/modèle/un magnifique}

${paramètre//modèle/un magnifique}

${paramètre/#modèle/un magnifique}

${paramètre/%modèle/un magnifique}

Cette extension effectue une recherche et un remplacement sur le contenu de paramètre. Si le texte correspond au caractère générique modèle, il est remplacé par le contenu de un magnifique. Dans la forme normale, seule la première occurrence de modèle est remplacé. Dans le // formulaire, toutes les occurrences sont remplacées. Les /# forme exige que la correspondance se produise au début de la chaîne, et le /% form requiert que la correspondance se produise à la fin de la chaîne. Sous toutes ses formes, /un magnifique peut être omis, provoquant la correspondance du texte par modèle à supprimer.



[moi@linuxbox ~]$ foo=JPG.JPG [moi@linuxbox ~]$ écho ${foo/JPG/jpg} jpg.JPG

[moi@linuxbox ~]$ écho ${foo//JPG/jpg}

jpg.jpg

[moi@linuxbox ~]$ écho ${foo/#JPG/jpg}

jpg.JPG

[moi@linuxbox ~]$ écho ${foo/%JPG/jpg}

JPG.jpg

[moi@linuxbox ~]$ foo=JPG.JPG [moi@linuxbox ~]$ écho ${foo/JPG/jpg} jpg.JPG

[moi@linuxbox ~]$ écho ${foo//JPG/jpg}

jpg.jpg

[moi@linuxbox ~]$ écho ${foo/#JPG/jpg}

jpg.JPG

[moi@linuxbox ~]$ écho ${foo/%JPG/jpg}

JPG.jpg


L'expansion des paramètres est une bonne chose à savoir. Les extensions de manipulation de chaîne peuvent être utilisées comme substituts d'autres commandes courantes telles que sed et de cut. Les extensions peuvent améliorer l'efficacité des scripts en éliminant l'utilisation de programmes externes. A titre d'exemple, nous allons modifier le mot le plus long programme discuté dans le chapitre précédent pour utiliser l'expansion des paramètres ${#j} à la place de la substitution de commande $(écho

-n $j | wc -c) et son sous-shell résultant, comme ceci :


#! / Bin / bash

# mot-long3 : recherche la chaîne la plus longue dans un fichier pour i ; faire

si [[ -r $i ]] ; alors max_word= max_len=0

#! / Bin / bash

# mot-long3 : recherche la chaîne la plus longue dans un fichier pour i ; faire

si [[ -r $i ]] ; alors max_word= max_len=0


pour j dans $(chaînes $i); faire

longueur=${#j}

if (( longueur > longueur_max )); alors max_len=$len max_word=$j

fi

fait

echo "$i: '$max_word' (caractères $max_len)"

fi fait

pour j dans $(chaînes $i); faire

longueur=${#j}

if (( longueur > longueur_max )); alors max_len=$len max_word=$j

fi

fait

echo "$i: '$max_word' (caractères $max_len)"

fi fait


Ensuite, nous comparerons l'efficacité des deux versions en utilisant le fiable commander:



[moi@linuxbox ~]$ temps le plus long-mot2 dirlist-usr-bin.txt

dirlist-usr-bin.txt : « scrollkeeper-get-extended-content-list » (38 caractères)

[moi@linuxbox ~]$ temps le plus long-mot2 dirlist-usr-bin.txt

dirlist-usr-bin.txt : « scrollkeeper-get-extended-content-list » (38 caractères)


réal

utilisateur

0m3.618s

0m1.544s

réal

utilisateur


système 0m1.768s

[moi@linuxbox ~]$ temps le plus long-mot3 dirlist-usr-bin.txt

dirlist-usr-bin.txt : « scrollkeeper-get-extended-content-list » (38 caractères)

système 0m1.768s

[moi@linuxbox ~]$ temps le plus long-mot3 dirlist-usr-bin.txt

dirlist-usr-bin.txt : « scrollkeeper-get-extended-content-list » (38 caractères)


réal

utilisateur

0m0.060s

0m0.056s

réal

utilisateur


système 0m0.008s

système 0m0.008s


image

La version originale du script prend 3.618 secondes pour analyser le fichier texte, tandis que la nouvelle version, utilisant l'expansion des paramètres, ne prend que 0.06 seconde-une amélioration très significative.


Meilleur système d'exploitation Cloud Computing chez OnWorks :