2

Я использую Ubuntu Linux, и я использую bash из с эмулятором терминала каждый день для многих задач.

Я хотел бы знать, как найти строку или подстроку в файле, который находится в определенном каталоге.

Если бы я знал файл, содержащий мою целевую подстроку, я бы просто перехватил файл и передал его через grep, таким образом:

cat file | grep mysubstring

Но в этом случае надоедливая подстрока может находиться в любом месте известного каталога.

Как мне выследить мою подстроку?

6 ответов6

11

Используйте подстановочный знак оболочки:

grep mysubstring *

Если вы хотите искать в подкаталогах, используйте опцию -r чтобы перейти в них:

grep -r myssubstring .
4
find -type f | xargs grep mysubstring

Эти команды (find , xargs и grep) имеют много опций, поэтому вы можете существенно настроить эту операцию.

4

скажем, я хочу найти все файлы кода Python, которые содержат текст "вики" в каталоге "~/projects", вот скрипт:

grep -lir "wiki" ~/projects/**/*.py

настроить скрипт под ваши конкретные требования.

2

Независимо от того, как вы это делаете, не катайте файлы в grep. Ваша оригинальная версия

cat file | grep mysubstring

правильнее сделать как

grep mysubstring file
1

Если вы хотите найти все файлы с определенной рекурсивной строкой из "текущего" каталога, используйте:

find . -type f -exec grep -l mysubstring {} \;

(должно работать на большинстве * nix ')

1

Если вам не нужно делать это в пакетном режиме, вы можете установить Midnight Commander (MC), он может искать строки в файлах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .