Ne lister que certains fichiers dans un répertoire correspondant au mot BOZO et se terminant par “123” ou “456”

J’essaie de comprendre comment obtenir une liste de noms de fichiers pour un fichier nommé BOZO mais se terminant par ONLY 123 OR 456.

Les fichiers sont:

BOZO12389,
BOZOand3
BOZOand456
BOZOand5
BOZOhello123

Donc, la commande ne doit afficher “BOZOhello123” et “BOZOand456”

Je ne peux pas comprendre. J’ai essayé toutes les formes de LS et de GREP auxquelles je peux penser. Ce qui est amusant, c’est que nous avons essayé de le faire en classe pendant environ 10 minutes et que personne ne pouvait l’obtenir (y compris l’instructeur).

J’ai fait ce qui suit et ça a fonctionné

ls BOZO*456 BOZO*123 

Utiliser les globs de shell:

 ls BOZO*{123,456} 

Utilisez des expressions régulières pour vous aider. La commande egrep devrait vous aider, car elle vous permettra d’utiliser des expressions régulières.

Vous recherchez des fichiers du genre BOZO456 et BOZO123

Une période est un joker, vous permettant de remplacer . Le * vous permettra de le répéter 0 fois ou plus. En plaçant autour de 123 et 456 parenthèses, vous simulerez un OU.

Ainsi, vous voulez que chaque caractère soit répété 0 fois ou plus, suivi de 123 ou 456.

Exemple:

egrep "BOZO.*(456|123)" data

Merci à Nathan Fellman pour l’aide et les modifications.

Vous pouvez également utiliser la commande find :

  find . \( -name "BOZO*123" -o -name "BOZO*456" \) 

Cela ne devrait pas être si difficile. La manière la plus naïve est de ls le répertoire et de grep pour seulement ce que vous voulez:

 $ ls *BOZO* | grep -e '123$' -e '456$'