GNU/Linux >> Tutoriels Linux >  >> Linux

En quoi les expressions régulières diffèrent-elles des caractères génériques utilisés pour filtrer les fichiers ?

Alors que nous utilisons * pour indiquer zéro ou plusieurs caractères précédents dans grep , nous utilisons *.c pour trouver tous les fichiers C lorsque nous l'utilisons avec le ls commande comme ls *.c . Quelqu'un pourrait-il dire comment l'utilisation de * diffère dans ces deux cas ?

Réponse acceptée :

La globalisation des noms de fichiers Shell et les expressions régulières utilisent certains des mêmes caractères, et ils ont des objectifs similaires, mais vous avez raison, ils ne sont pas compatibles. L'englobement des noms de fichiers est un système beaucoup moins puissant.

Dans le remplacement du nom de fichier :

  • * signifie "zéro ou plusieurs caractères"

  • ? signifie "n'importe quel caractère"

Mais dans les regex, vous devez utiliser .* pour signifier "zéro ou plusieurs caractères", et . signifie "n'importe quel caractère". Un ? signifie quelque chose de tout à fait différent dans les regex :zéro ou une instance de l'élément RE précédent.

Crochets ([] ) semblent fonctionner de la même manière dans les deux systèmes sur le système sur lequel je tape ceci, du moins pour les cas simples. Cela inclut des éléments tels que les classes de caractères POSIX (par exemple, [:alpha:] ). Cela dit, si vous avez besoin que vos commandes fonctionnent sur de nombreux types de systèmes différents, je vous déconseille d'utiliser quoi que ce soit au-delà des choses élémentaires comme des listes de caractères (par exemple, [abeq] ) et peut-être des plages de caractères (par exemple [a-c] ).

Ces différences signifient que les deux systèmes ne sont directement interchangeables que pour les cas simples. Si vous avez besoin d'une correspondance regex des noms de fichiers, vous devez le faire d'une autre manière. find -regex est une option. (Remarquez qu'il y a aussi find -name , soit dit en passant, qui utilise la syntaxe glob.)


Linux
  1. Comment utiliser Awk et des expressions régulières pour filtrer du texte ou une chaîne dans des fichiers

  2. Comment répertorier les fichiers installés à partir d'un package RPM ou DEB sous Linux

  3. Comment exclure certaines tailles de fichiers de la copie sous Linux

  4. Comment télécharger des fichiers à partir du serveur SFTP à l'aide d'un script python

  5. Comment utiliser Wget pour télécharger récursivement des fichiers depuis un répertoire web ?

Comment rechercher des fichiers à partir du terminal sous Linux

Comment partager en toute sécurité des fichiers à partir de la ligne de commande avec ffsend sous Linux

Comment créer une vidéo à partir de fichiers PDF sous Linux

Comment télécharger des fichiers à partir de serveurs Linux distants

Comment supprimer les caractères (^M) d'un fichier sous Linux

Comment supprimer tous les espaces blancs d'un fichier texte