Лучший способ искать строку в файле?

Я пытаюсь найти конкретную строку текста в файле где-нибудь на моем жестком диске. Лучшее, которое я придумал до сих пор:

find -type f / | xargs cat | grep "string to find"

Но это просто говорит мне, существует ли строка где-нибудь или нет.

Как я могу знать, в каком файле я нашел его?

Существует ли лучший путь?

0
задан 11.12.2015, 15:23

6 ответов

find / -type f -exec grep "string" {} +

Это выполнит поиск без учета регистра, который будет медленнее, но более гибким:

find / -type f -exec grep -i "string" {} +

можно получить много результатов, таким образом, можно передать его по каналу к меньше, затем используйте f и b для навигации вперед и назад постранично через вывод:

find / -type f -exec grep -i "string" {} + | less

Если Вы знаете, что ищете *.txt файлы, можно совершенствовать его еще больше:

find / -type f -name "*.txt" -exec grep -i "string" {} + | less
4
ответ дан 24.11.2019, 02:36

Это должно добиться цели и намного более просто:

grep -R "some string" /

добавление-n покажет Вам номера строки, Вам нужно это:

grep -Rn "some string" /
5
ответ дан 24.11.2019, 02:36

Почему использование 'кошка' вообще в этом случае? Я всегда нахожу это нечетным, как люди используют 'кошку' ни по какой причине вообще. Просто сделайте:

find -type f / | xargs grep "string to find"

Конечно, поиск каждого файла на Вашем всем диске будет довольно медленным. Вы - вероятно, более обеспеченное использование некоторой программы индексации, если Вы должны для поиска как это часто. Например, Гончая является довольно обширной поисковой системой, это было вокруг некоторое время. Другие опции являются Strigi KDE или Поиском по компьютеру Google

По крайней мере необходимо использовать, 'располагаются' вместо 'находки', она только индексирует имена файлов и не их содержание, но это все еще ускорит вещи. Кроме того, необходимо отфильтровать на основе типа файла перед использованием grep. Например, с помощью grep на 100 МБ avi файл или что-то - просто пустая трата времени.

4
ответ дан 24.11.2019, 02:36

Как я могу знать, в каком файле я нашел его?

Необходимо использовать'-H'опция с'grep'для печати файла соответствия.


Кроме того,

  • Это также была бы хорошая идея использовать немного лучшее предположение, чем корень ('/').
  • Johnсхема -exec переключитесь'|'оператор поможет, когда у Вас будет много искавших файлов
2
ответ дан 24.11.2019, 02:36
  • 1
    +1 - Вы почти никогда не должны должны быть запускать поиск в /. Также стоит сказать это при выполнении поиска, начинающего с / как обычный пользователь, Вы собираетесь закончить с тонной сообщений об ошибках из-за проблем полномочий. – Telemachus 07.11.2009, 00:01
  • 2
    grep-H не работал бы в этом случае из-за его избыточного использования 'кошки'. это просто распечатало бы 'stdin'. Теперь, если бы он не использовал 'кошку', то затем настройка по умолчанию grep должна распечатать, в каком файле это соответствует, таким образом, ему не был бы нужен дополнительный флаг. – davr 07.11.2009, 01:50

что относительно:

grep -r -H -i 'string' .
2
ответ дан 24.11.2019, 02:36

Да, grep с флагом-r будет искать рекурсивно. Попробуйте команду как:

grep -ri 'hello' .

Который будет искать текущий каталог, и каждый файл и каталог в нем, для фразы 'привет'. Флаг-i делает это независимым от случая, таким образом, это также найдет "Привет", "ПРИВЕТ", и т.д.

1
ответ дан 24.11.2019, 02:36

Теги

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