Название вашего вопроса говорит "файлы, содержащие" слово. Однако в своем вопросе вы упоминаете «получить имена файлов, содержащие» слово. Это разные вещи. К счастью, они оба довольно просты, поэтому я просто покажу вам оба.
Чтобы найти файлы, содержащие слово:
grep -iR "слово1".
-I говорит игнорировать регистр -R является рекурсивным (имеется в виду поиск по подкаталогам). (Заглавная буква задокументирована OpenBSD и больше похожа на ls, поэтому я предпочитаю, чтобы она была -r.) Период указывает, с чего начать поиск.
Чтобы найти имена файлов, содержащие слово:
находить . -имя " слово1 "
-Iname является нечувствительной к регистру версией "name".
Период указывает, с чего начать поиск. Текущий каталог часто является хорошим выбором.
Примечание. Вы ссылались на « . » В одном из своих примеров. Это было здорово для DOS и, как правило, хорошо для Microsoft Windows, но это действительно плохая привычка для среды Unix. Это заставляет меня думать, что ты знаком с Windows. Хорошо, поймите, что в Windows "НАЙТИ" (или "найти") находит текст в файлах. Unix отличается: "grep" находит текст в файлах, а "find" находит имена файлов.
Теперь, чтобы исключить слово 99 и поместить его в текстовый файл, добавьте следующий текст:
| grep -v word99 >> output.txt
Это ключ трубы, почти всегда Shift-Backslash.
Так, например, если вы хотите сделать оба, используйте:
grep -iR "слово1". | grep -v word99 >> output.txt
находить . имя " слово1 " | grep -v word99 >> output.txt
Часть перед символом канала запускает команду и отправляет вывод в канал в стиле Unix. Затем содержимое отправляется из канала в стандартный ввод следующей команды. grep -v будет смотреть на стандартный ввод, который он получает, и исключать то, что вы хотите. grep -v отправит оставшиеся результаты в стандартный вывод. >> перенаправит стандартный вывод предыдущей команды в конец указанного текстового файла.
Причина, по которой вы не видите документированных опций в команде "find" о том, как исключить текст, заключается в том, что Unix был очень сильно разработан с этой идеей создания более простых программ и использования техники конвейеризации для создания сложных эффектов. В средах Microsoft старый код Microsoft был особенно громоздким при обработке каналов, поэтому программы в основном пытались включить больше функций в каждую программу. С одной стороны, это кажется более простым для конечного пользователя (имея все встроенное), но этому подходу не хватает согласованности. Когда вы используете Unix, не бойтесь трубопровода: как только вы привыкнете к нему, вы можете обнаружить, что он сильно упрощает вещи, но потому что вы можете использовать свои простые инструменты во многих ситуациях, и поэтому вам не нужно переучивать простые приемы снова и снова (для каждой отдельной программы).