it-swarm.com.de

befehlszeile grep * funktioniert nicht aber grep *. funktioniert

Wie kommt es, dass "staff * 22" nichts anzeigt, während "staff * 22" Zeilen mit staff gefolgt von 22 auflistet, obwohl in keiner der Zeilen "." in ihnen?

$ 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

Was tun gegebene grep Befehle?

Aus Ihrer Ausgabe geht hervor, dass Sie nach allen Dateien suchen möchten, die zur Gruppe "Mitarbeiter" gehören und um 22 Uhr erstellt wurden (oder um 22 Uhr im 12-Stunden-Format). Wir werden das unten ansprechen, aber lassen Sie uns zuerst herausfinden, was Ihre grep Befehle tun und warum sie nicht das richtige Werkzeug für das sind, was Sie wollen.

Zuallererst unterscheiden sich die beiden grep -Befehle, die Sie ausführen, geringfügig in der Art und Weise, wie sie interpretiert werden, und Ihr Ansatz ist nicht richtig - Sie sollten nicht versuchen, Ausgabe von ls zu analysieren .

  • grep "staff*22" lautet wie folgt: "Entspricht allen Zeilen, die mit" staf "beginnen und möglicherweise ein zusätzliches" f "enthalten, unmittelbar gefolgt von" 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" lautet wie folgt: "Entspricht allen Zeilen, in denen sich 'Notenzeilen' befinden, null oder mehr Zeichen dazwischen (jede Art von Zeichen) und Nummer 22".

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

Besserer Ansatz

Der Befehl ls sollte im Allgemeinen nur für die interaktive Auflistung verwendet werden, d. H., Wenn Sie nur einen kurzen Blick auf die Inhalte eines Ordners werfen möchten. Wenn es notwendig ist, bestimmte Dateien zu finden oder wie man mit diesen Dateien über ein Skript umgeht, ist der Befehl find der richtige Weg. Es verfügt über die Variable -group, mit deren Hilfe Sie alle Dateien, die zur Gruppe staff gehören, und -nevermt isolieren können, um Dateien mit einer Änderungszeit zu finden, die älter als ein bestimmtes Datum ist. Was Sie zum Beispiel wollen, ist wahrscheinlich Folgendes:

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

Siehe auch: https://superuser.com/questions/580273/ubuntu-linux-find-files-between-specific-times

3