Поиск подстроки во всех поддиректориях
Модераторы: /dev/random, Модераторы разделов
Поиск подстроки во всех поддиректориях
Как найти файлы содержащие заданную подстроку, включая находящиеся в поддиректориях. Возможно несколько уровней вложения. Аналогично найти все файлы у которых есть строки длинее стольки то символов.
Re: Поиск подстроки во всех поддиректориях
Спасибо сказали:
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск подстроки во всех поддиректориях
Код: Выделить всё
find -exec grep {} \;
если надо найти и остановится, то
Код: Выделить всё
find -type f -ls -exec grep 'pattern' {} \; -quit
Код: Выделить всё
sed -r '/.{77}/q70'
вернёт error code 70, если найдёт хоть одну строку с 77ю символами
Спасибо сказали:
Re: Поиск подстроки во всех поддиректориях
По сравнению с grep -R будет работать существенно дольше. Если уж так принципиален именно find, то хотя бы \+ используйте.
К тому же, как я могу догадываться, необходим только список файлов, в таком случае будет полезна опция -l у grep'a.
Так же стоит обратить внимание на опцию -m1, чтобы, в случае больших файлов, не читать весь файл, а остановить чтение конкретного файла после первого совпадения.
Ну и для строк с количеством символов > 77:
Код: Выделить всё
grep -Rl -m1 '.\{77\}' .
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск подстроки во всех поддиректориях
не. Тут как раз надо по одному файлы обрабатывать,
1. что-бы вовремя остановиться.
2. что-бы вбить второй файл /dev/null, т.к. смысла нет найти строку, не зная, ГДЕ найдена эта строка.
см. вторую мою команду с -quit. Это пример. На самом деле там можно что угодно написать. И более того, сделать две вветки нашла/не нашла.
ну можно и так. Хотя тогда уж лучше sed.
ну что вы за бред пишете? Кто мешает вместо q70 использовать любую другую команду, в т.ч. и bash-скрипт?
Не хоте код возврата? Да пожалуйста! Напишите что-то другое. В grep так не сделать, увы.
вот именно потому и нужно обрабатывать файлы по одному. Grep умеет, но это только для самых простых случаев подходит.
Re: Поиск подстроки во всех поддиректориях
ок, согласен, тут действительно \+ не годится. хотя работать всё равно дольше будет (:
Т.е. вы считаете, что в данном конкретном случае любая другая команда, в т.ч. и bash-скрипт, проще, чем grep с -m1, я правильно понимаю?
тут дело не в том, что в grep'e нельзя так сделать, а в том, что, имхо, sed в данном случае -- оверкилл. впрочем, с вами на эту тему бесполезно спорить: вы готовы даже в кофеварку sed засунуть.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск подстроки во всех поддиректориях
нет, не правильно. И понимаете неправильно, и ваше "проще" тоже далеко не всегда правильно. Потому что "проверка кода возврата" вовсе и не обязательно нужна. И если она не нужна, то её и не нужно делать. Это уже вопрос совсем другой.
grep с Over9000ю ключей -- тоже оверкилл. Ну и вообще, что "оверкилл", а что — нет, это мы не знаем. Зависит от задачи. Sed конечно не всегда лучший вариант, но не нужно говорить, что sed "всегда не проще" и "всегда оверкилл", если речь идёт о задаче ТС(которая вообще слабо формализована).
Я даже не представляю, что там ТС хочет искать, как, и как должны выглядеть результаты. Т.ч. grep тоже подойдёт, как вариант. Ну и sed, как другой вариант. А что из них оверкилл — это мы решим, как только условия задачи будут чётче.
а я это прекрасно знаю.
PS: чем мне нравится grep, так это раскраской, которая в grep искароппки, а в sed тоже можно, но жуткими и страшными костылями.
PPS: а чем не нравится, так это жуткой тормознутостью (которая вроде бы исправлена в посл. версии).
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Поиск подстроки во всех поддиректориях
kt315e писал(а): ↑05.04.2014 16:03Да, вот так работает:
Код: Выделить всё
grep -R 123 .
Старые маны оказывается смотрел.
Можно короче: rgrep 123 ..
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: Поиск подстроки во всех поддиректориях
rgrep есть не везде.
Re: Поиск подстроки во всех поддиректориях
Спасибо всем! grep похоже подойдёт. Ковыряю фортрановские исходники с огромным количеством файлов. В частности ищу как читаются входные файлы.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск подстроки во всех поддиректориях
советую освоить vim+ctags+cscope.