Аналогично этому вопросу Как мне найти все файлы содержащие определенный текст в Linux?, но мне нужны все файлы, содержащие несколько заданных строк (эти строки не обязательно рядом друг с другом или в одной строке, просто в одном файле).
Мой вариант использования: я смотрю на пользовательский интерфейс и хочу изменить файл, который управляет этим конкретным экраном. Однако кодовая база огромна, и найти этот файл сложно. Все, что мне нужно сделать, это несколько жестко закодированных строк на этом экране, по которым я хотел бы выполнить поиск. Хотя строки довольно общие, такие как «Готово», «Закрыть», «Просмотреть подробности»... Выполнение поиска по любой из этих строк по отдельности, используя ответ из связанного вопроса выше, возвращает слишком много результатов, но я думаю выполнение поиска по всем из них вместе отфильтрует его достаточно, чтобы найти файл.
-e
дляgrep
? - person Roadowl   schedule 21.05.2020AND
. - person Roadowl   schedule 21.05.2020grep -rlZ 'Done' | xargs -0 grep -lZ 'Close' | xargs -0 grep -l 'View Details'
, где-r
будет выполнять рекурсивный поиск (текущий каталог здесь, так как конкретный путь не передается).. продолжайте добавлятьxargs -0 grep -lZ
к любому количеству строк, которые вам нужны - person Sundeep   schedule 21.05.2020LC_ALL=C grep ....
будет намного быстрее... в противном случае я бы предложил ripgrep, поскольку он автоматически использует несколько ядер/потоков/и т. д. для повышения производительности, а также имеет другие оптимизации. - person Sundeep   schedule 21.05.2020grep -rlzP '(?s)(?=.*Done)(?=.*Close)(?=.*View Details)'
- person Sundeep   schedule 21.05.2020grep
не просматривают все ваши файлы, они просматривают только те файлы, о которых уже известно, что они содержат первое условие поиска (или все предыдущие, в общем случае ). Кроме того, если вы используете фиксированные строки, используйте флаг-F
, чтобы выполнять поиск только фиксированных строк (намного быстрее). И, если вы хотите искать только целые слова ('Close'
хорошо,'Closest'
не соответствует), добавьте также флаг-w
. Расскажите нам, как это происходит. - person mathguy   schedule 22.05.2020