Correspondance de motifs bash

Correspondance de motifs bash

La correspondance de motifs bash est un concept indispensable qui est utile lors de la sélection de différents noms de fichiers dans un répertoire et de la vérification si une chaîne correspond à un format donné. Que vous débutiez avec une correspondance de motifs bash ou que vous cherchiez à réprimer vos compétences, ce guide couvre les différentes manières et conseils pour la correspondance des modèles.

Correspondance de motifs

Bash propose principalement deux types de correspondance de motifs: globe et Globs prolongés. Les deux offrent aux utilisateurs des moyens simples de sélectionner les noms de fichiers et de vérifier les différentes chaînes contre des règles spécifiques. Cependant, Bash prend également en charge l'utilisation expirat, Surtout lorsque vous travaillez avec des scripts pour valider diverses données d'entrée et d'analyse des utilisateurs.

1. Modèle de bash correspondant avec les globes

La correspondance du modèle glob implique principalement de vérifier les noms de fichiers spécifiques dans un répertoire donné. Ils sont appelés faunes. Il existe trois types de modèles Bash Glob:

2. Astérisque (*)

Il est utilisé lorsque vous souhaitez correspondre à zéro ou à des noms de fichiers.

Ayons quelques exemples.

Vérification des noms de fichiers commençant ou se terminant par un personnage donné

Par exemple, si nous devions rechercher un fichier à commencer par l ou li, Nous pourrions utiliser les commandes suivantes:

ls l *
ls li *

Notez comment il correspond à tous les noms de fichiers qui commencent par Li ou L dans le répertoire actuel, y compris les répertoires.

Pour correspondre uniquement aux répertoires, ajoutez le / après le joker, comme indiqué dans ce qui suit:

De même, si nous devions faire correspondre les noms de fichiers qui se termine par un personnage donné ou des caractères, nous pourrions utiliser le joker comme indiqué dans l'illustration suivante. Dans cet exemple, nous correspondons aux noms de fichiers qui se terminent avec e.

ls * e

Supposons que vous n'êtes pas sûr du nom de fichier que vous souhaitez rechercher, mais vous connaissez les personnages donnés. Comme dans l'exemple suivant, vous pouvez toujours faire correspondre les noms de fichiers en ajoutant le joker avant et après les personnages.

Nous avons apparié les noms de fichiers qui incluent le nux Mot-clé dans leur nom.

Vérification des fichiers avec une extension donnée

Avec la correspondance du modèle bash, vous pouvez localiser les fichiers avec une extension donnée. Par exemple, si vous souhaitez trouver tous les PDF ou fichiers texte. Dans ce cas, vous ajoutez le joker avant l'extension du fichier. Voyons l'exemple suivant pour correspondre à tous les fichiers texte:

LS *.SMS

Tous les fichiers texte sont appariés comme indiqué dans ce qui suit:

3. Point d'interrogation (?)

Le wildcard interroge correspond aux noms de fichiers qui correspondent à un seul personnage. Cependant, vous devez connaître le nombre de caractères qu'un nom de fichier donné a, de sorte que chacun «?»Représente chaque caractère.

Par exemple, pour faire correspondre un nom de fichier avec quatre caractères, mais nous connaissons le dernier personnage, nous pourrions avoir l'exemple suivant:

LS ???e

De même, pour trouver une extension donnée où vous connaissez le nombre de caractères du nom de fichier, nous pourrions utiliser la commande suivante:

LS ?????.SMS

4. Crochets []

Lorsque vous voulez une recherche plus spécifique, comme la correspondance des noms de fichiers qui contiennent les caractères donnés, les caractères à correspondre peuvent être ajoutés dans les crochets.

Par exemple, pour correspondre aux noms de fichiers contenant des caractères ou des nombres spécifiés quelle que soit l'extension, nous pouvons avoir la commande suivante:

ls [e-m] *.*

Ici, nous correspondons aux noms de fichiers qui contiennent n'importe quel caractère de E à M et ont une extension.

Si vous vouliez faire correspondre les noms de fichiers qui commencent par des caractères spécifiques, disons en commençant par [f-l] et en ayant une extension donnée, nous pourrions utiliser le modèle suivant:

ls [f-l] *.SMS*

5. Assortissement de motif de bash avec des globes étendus

Les globes étendus ont une énorme ressemblance avec les expressions régulières. Cependant, ils sont désactivés par défaut. Lorsque vous devez les utiliser, vous devez les activer en utilisant la commande suivante:

$ shopt -s extglob

Les globes étendus incluent:

6. ?(motifs)

Il est utilisé lors de la correspondance avec zéro ou un occurrence du motif spécifié.

Par exemple, si vous souhaitez faire correspondre tous les noms de fichiers avec une extension donnée ou ceux qui contiennent des caractères spécifiques dans leur nommage, nous pourrions avoir la commande suivante:

$ ls ?(* nux * | *.sh)

7. *(motifs)

Il est utilisé lors de la correspondance avec zéro ou plus occurrences du motif spécifié.

Par exemple, nous pourrions utiliser la commande suivante pour correspondre aux noms de fichiers qui commencent avec zéro ou plus «F» et sont des fichiers texte:

$ ls * (f).SMS

8. +(motifs)

Il est utilisé lors de la correspondance avec un ou plus occurrences du motif spécifié.

Si nous exécutons la commande précédente, notez qu'il correspond uniquement aux noms de fichiers qui doivent contenir au moins un «F», ce qui signifie que le .SMS Le fichier ne sera pas un match.

$ ls + (f).SMS

9. @(motifs)

Il est utilisé lors de la correspondance avec une occurrence du motif spécifié.

Si nous avons seulement besoin de faire correspondre les noms de fichiers qui ne contiennent qu'un seul «F» en utilisant le même modèle qui est utilisé dans l'exemple précédent, nous pourrions utiliser le @ comme indiqué dans ce qui suit:

$ ls @ (f).SMS

dix. !(motifs)

Il est utilisé lorsque vous souhaitez correspondre à tout ce qui ne correspond pas au modèle spécifié.

Ayons un exemple où nous voulons faire correspondre tous les noms de fichiers qui n'ont pas le modèle spécifié. Dans cet exemple, nous correspondons à tous les noms de fichiers qui ne sont pas des fichiers texte ou des scripts bash. La commande est la suivante:

$ ls !(*.txt | *.sh)

Conclusion

Ce guide a présenté la correspondance de motifs bash et les différents exemples pour vous assurer que vous comprenez comment travailler avec les différentes options de correspondance de motifs. À l'aide de cette fondation, vous pouvez faire avancer la correspondance de votre modèle bash et utiliser la même logique lorsque vous souhaitez correspondre aux différents modèles du terminal ou lors de la création des scripts bash.