Это команда, которую я пытаюсь выполнить.
grep -r "printf" *.c
Я пытаюсь получить все строки printf из всех файлов .c
, присутствующих в моем cwd. На данный момент моим текущим каталогом является Desktop, и у меня есть не менее 10-15 .c
файлов в моих подкаталогах в Desktop, но эта команда вообще не показывает совпадений. Итак, как мне сделать эту работу в этом случае?
Если Вы делаете:
grep -r "printf" *.c
оболочка расширится *.c
до всех файлов/каталогов, заканчивающихся в .c
в Вашем текущем каталоге, если никакой такой файл/каталог не будет существовать, то шаблон будут рассматривать буквально (по-видимому, Вы не имеете nullglob
набор).
, Как Вы видите, Ваш текущий шаблон никогда не идет под текущим каталогом, поскольку у Вас нет никакого .c
файл в текущем каталоге или если существует кто-либо, они не имеют printf
в них, ведя к пустому выводу.
необходимо использовать --include
для поиска в выборочных файлах только, и также -r
для пересечения рекурсивно:
grep -r --include="*.c" "printf" .
Вышеупомянутое будет искать во всем .c
файлы для строки (шаблон) printf
, рекурсивно начинающий с текущего каталога.
, если Вы хотите следовать за всеми символьными ссылками:
grep -R --include="*.c" "printf" .
Если Вы хотите знать, почему Ваша команда не работает, см. другой ответ. Если Вы хотите знать, как заставить его работать, вот другой подход (скопированный с Grep в файлах с определенным расширением в соответствии с каталогом с косметическими локализациями), который использует возможности bash
вместо возможностей grep
(и поэтому будет работать на любую команду, такой как wc
, cp
или tar
, и не просто grep
):
Набор (включает) опцию оболочки globstar
с командой
shopt -s globstar
Это вызовет **
как компонент имени файла для значения всего здесь и ниже. Так, если Вы находитесь в Desktop
, затем **
средства все в Desktop
каталог и его подкаталоги. Затем можно использовать
grep "printf" **/*.c
искать весь .c
файлы в и под Desktop
. Вы не должны указывать -r
, потому что оболочка делает рекурсию для Вас, и Вы не должны указывать --include
, потому что шаблон расширения пути (иначе шарик или подстановочный знак) содержит *.c
.
Можно сбросить опции с shopt -u
.
redshift -O 3000 -v -g 0.300:0.300:0.300 -b 0.3:0.2
дисплей не изменяется. Это сообщает о ' Яркость: 0.30:0.20 Гамма (Дневное время): 0.300, 0.300, 0.300 Гаммы (Ночь): 0.300, 0.300, 0.300 Используя метод 'randr'. цветовая температура: 3000K' но никакое визуальное изменение – Jeni 15 May 2018 в 20:59