web-dev-qa-db-fra.com

La ligne de commande grep * ne fonctionne pas mais grep *. travaux

Pourquoi "staff * 22" ne montre rien alors que "staff. * 22" répertorie les lignes contenant du personnel suivies de 22 bien que toutes les lignes ne contiennent pas "." en eux?

$ ls -l | grep "staff*22"
$ ls -l | grep "staff.*22"
drwxrwxr-x  2 kim  staff   68 Jan 12 22:23 hihi
drwxrwxrwx  4 kim  staff  136 Jan 12 22:29 temp2
drwxrwxrwx  3 kim  staff  102 Jan 12 22:41 tes2
2
Mint.K

Que font les commandes grep données?

Il ressort clairement de votre sortie que vous souhaitez rechercher tous les fichiers appartenant au groupe "personnel" et créés à 22 heures (ou 22 heures au format 12 heures). Nous aborderons cette question ci-dessous, mais commençons par comprendre ce que font vos commandes grep et pourquoi elles ne sont pas le bon outil pour ce que vous voulez.

Tout d'abord, les deux commandes grep que vous exécutez sont légèrement différentes de la façon dont elles sont interprétées et votre approche n'est pas appropriée - vous ne devriez pas essayer de analyser la sortie de ls .

  • grep "staff*22" se lit comme "correspond à toutes les lignes commençant par" staf "et peut contenir ou non un" f "supplémentaire, suivi de" 22 "."

    $ echo "staff whatever 22" | grep 'staff*22'               
    $ echo "staff22" | grep 'staf*22'                          
    staff22
    $ echo "staf22" | grep 'staff*22'                         
    staf22
    $ echo "staf22" | grep 'staff*22'
    staf22
    
  • grep "staff.*22" se lit comme "correspond à toutes les lignes qui ont une" portée ", zéro ou plusieurs caractères entre elles (n'importe quel type de caractère) et le numéro 22".

    $  echo "staff whatever 22" | grep 'staff.*22'                                                                           
    staff whatever 22
    

Meilleure approche

En règle générale, la commande ls ne doit être utilisée que pour les listes interactives, c’est-à-dire lorsque vous souhaitez seulement jeter un coup d’œil rapide sur le contenu d’un dossier. Quand il est nécessaire de trouver des fichiers spécifiques, ou de voir comment travailler avec ces fichiers via un script, la commande find est la voie à suivre. Il contient la variable -group, qui vous aidera à isoler tous les fichiers appartenant au groupe staff, et -nevermt pour rechercher des fichiers dont l’heure de modification est plus récente que celle indiquée. Par exemple, ce que vous voulez, c'est probablement ceci:

find . -group staff -newermt "2017-01-12 21:59:59" 

Voir aussi ceci: https://superuser.com/questions/580273/ubuntu-linux-find-files-between-specific-times

3
Sergiy Kolodyazhnyy