grep * из командной строки не работает, но grep *. работает

Почему "staff*22" ничего не показывает, в то время как "staff.*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

1 ответ

Решение

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

Из вашего вывода видно, что вы хотите найти все файлы, которые принадлежат к группе "сотрудники" и созданы в 22 часа (или в 22 часа в 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

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