Это должно сделать свое дело и намного проще:
grep -R "some string" /
добавление -n покажет вам номера строк, которые вам нужны:
grep -Rn "some string" /
Я пытаюсь найти определенную строку текста в файле где-то на моем жестком диске. Лучшее, что я придумал, это:
find -type f / | xargs cat | grep "string to find"
Но это просто говорит мне, существует ли строка где-то или нет.
Как я могу узнать, в каком файле я его нашел?
Есть ли способ лучше?
Это должно сделать свое дело и намного проще:
grep -R "some string" /
добавление -n покажет вам номера строк, которые вам нужны:
grep -Rn "some string" /
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
Зачем вообще использовать «кошку» в этом случае? Я всегда нахожу странным, как люди используют «кошку» без всякой причины. Просто делать:
find -type f / | xargs grep "string to find"
Конечно, поиск каждого файла на вашем диске будет очень медленным. Возможно, вам лучше использовать какую-то программу индексирования, если вам часто приходится искать подобным образом. Например, Beagle - довольно обширная поисковая система, она существует уже некоторое время. Другие варианты - KDE Strigi или Google Desktop.
По крайней мере, вы должны использовать «locate» вместо «find», он только индексирует имена файлов, а не их содержимое, но это все равно ускорит процесс. Кроме того, вы должны фильтровать по типу файла, прежде чем использовать grep. Например, использование grep для файла avi размером 100 МБ или чего-то другого - просто трата времени.
как насчет:
grep -r -H -i 'string' .
Как я могу узнать, в каком файле я его нашел?
Вам необходимо использовать -H
опцию ' grep
' с ' ' для печати соответствующего файла.
Также,
/
').John
Схема -exec
переключения |
оператора ' ' поможет, когда у вас много файлов, которые ищутДа, grep с флагом -r будет искать рекурсивно. Попробуйте команду как:
grep -ri 'hello' .
Который будет искать в текущем каталоге и во всех файлах и каталогах внутри него фразу «привет». Флаг -i делает его независимым от регистра, поэтому он также найдет «Hello», «HELLO» и т. Д.