командная строка grep * не работает, но grep *. работы

Каким образом "staff*22" ничего не показывает в то время как "штат. *22" строки списков, которые содержат штат, сопровождаемый 22, хотя какая-либо из строк не содержит "." в них?

$ 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
задан 17 January 2017 в 03:22

1 ответ

Что делает данные команды grep делают

От Вашего вывода очевидно, что Вы хотите найти все файлы, которые принадлежат группе "штата" и созданный в час 22 (или 22:00 в 12-часовом формате). Мы обратимся к этому ниже, но позволяем первой фигуре что Ваш grep команды делают и почему они не правильный инструмент для того, что Вы хотите.

В первую очередь, два grep команды, которые Вы делаете, немного отличаются в способе, которым они интерпретируются, и Ваш подход не является надлежащим - Вы не должны пытаться проанализировать вывод ls.

  • grep "staff*22" чтения как "соответствие все строки, которые запускаются с 'staf' и могут или не могут иметь в них дополнительного 'f', сразу сопровождаемого '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" чтения как "соответствие все строки, которые имеют 'штат' в них, нуле или большем количестве промежуточных символов (любой тип символа), и номер 22".

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

Лучший подход

ls команда в целом должна только использоваться для интерактивного списка, т.е. когда Вы только хотите иметь быстрый быстрый взгляд на то, что в папке. Когда необходимо найти определенные файлы или некоторых как работа с теми файлами с помощью сценария, find команда является способом пойти. Это имеет -group переменная, которая поможет Вам изолировать все файлы, которые принадлежат staff группа, и -nevermt для нахождения файлов со временем изменения, более новым, чем некоторая определенная дата. Например, то, что Вы хотите, является, вероятно, этим:

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

См. также это: https://superuser.com/questions/580273/ubuntu-linux-find-files-between-specific-times

3
ответ дан 2 December 2019 в 02:48

Другие вопросы по тегам:

Похожие вопросы: