Что действительно “регистрирует $ (grep –irl грязь/usr/src/linux-2.4)” средний?

Кто-то мог объяснить, что грязь и как точно grep работает в этом случае?

file $(grep –irl crud /usr/src/linux-2.4)
0
задан 17 April 2017 в 05:43

2 ответа

1118 Давайте разберемся с этим. Во-первых, формат $(command) называется «подстановка команд» . Это способ возврата результата команды, по сути, создание переменной, значением которой является вывод этой команды. Например:

$ echo foo
foo
$ var=$(echo foo) ## set the output of 'echo foo' to the variable $var
$ echo "$var"
foo

Теперь, в этом случае, выполняемая команда - grep -irl crud /usr/src/linux-2.4. Чтобы понять, что это значит, запустите man grep и посмотрите, что делает каждый из этих трех (i, r и l) вариантов:

   -i, --ignore-case
          Ignore case distinctions in  both  the  PATTERN  and  the  input
          files.

   -r, --recursive
          Read all files  under  each  directory,  recursively,  following
          symbolic  links only if they are on the command line.  Note that
          if  no  file  operand  is  given,  grep  searches  the   working
          directory.  This is equivalent to the -d recurse option.

   -l, --files-with-matches
          Suppress normal output; instead print the  name  of  each  input
          file  from  which  output would normally have been printed.  The
          scanning will stop on the first match.

Все вместе, что означает «рекурсивный» просмотрите все файлы из /usr/src/linux-2.4 и найдите в каждом из них слово crud без учета регистра, а затем напечатайте имена любых подходящих файлов ".

Таким образом, эта команда напечатает список имен файлов, содержащих слово crud. Поскольку мы запускаем file $(grep . . . ), это означает, что команда file (которая печатает тип файла и некоторую информацию о рассматриваемом файле) будет выполняться для каждого из файлов, возвращаемых grep.

Собрав все это вместе, эта команда выведет информацию о базовом файле для всех файлов в /usr/src/linux-2.4, содержащую строку crud. На моей машине 14.04 это возвращает:

$ file $(grep -irl crud /usr/src/)
/usr/src/linux-headers-3.16.0-77/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.16.0-77/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text
/usr/src/linux-headers-3.13.0-108/include/linux/pktcdvd.h:                  C source, ASCII text
/usr/src/linux-headers-3.13.0-108/arch/arm/mach-sa1100/include/mach/cerf.h: ASCII text
/usr/src/linux-headers-3.13.0-46/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.13.0-46/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text
/usr/src/linux-headers-3.16.0-30/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.16.0-30/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text
2
ответ дан 3 November 2019 в 10:42

file согласно справке, определяет Тип обработанного файла. Команда $(grep -irl crud /usr/src/linux-2.4):

  • $(<command>) Получения значение внутренней команды.
  • grep -irl crud /usr/src/linux-2.4, внутренняя команда, которая ищет строковую грязь, с игнорируют регистр, рекурсивно и печатают только названия файлов, содержащих соответствия.

Так, Ваша полная команда, ищет тип файлов, которые соответствуют строковой грязи в каталоге /usr/src/linux-2.4

0
ответ дан 3 November 2019 в 10:42

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

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