Как сделать максимальный поиск в ack и grep?


32

Есть ли способ сказать, ackчтобы искать только текст в текущей папке? (или указать max-depthуровень?) А с grep?


1
Нет, у ack нет опции максимальной глубины, кроме -nкак вообще не использовать.
Энди Лестер

Ответы:


22

Использовать -nдля no-recurse:

$ ack -n foo

grepне является рекурсивным по умолчанию, и вы должны использовать -rфлаг, только если вы хотите рекурсивный поиск.

Вы можете искать текущий каталог grepследующим образом:

$ grep -- foo *

13
Не отвечает на вопрос? (что, если я хочу вернуться на глубину 2)
Стивен Лу

Хороший вопрос, я пропустил это. Какие-либо предложения?
Эрик Уилсон

29

Вы можете найти пару с аргументом -exec. пример:

find . -maxdepth 1 -exec grep foo {} \;

Это можно масштабировать, т.е. -maxdepth 2


Стефан, мой ответ ( -maxdepth 1) был масштабируемым. Например -maxdepth 2. Я не знаю, как описать редактирование, которое вы сделали как таковое.
Дэвид Уилкинс

он не достигнет @stephane, если вы не используете @.
Брайам

4
Да, извините, я согласен, что мое редактирование было слишком навязчивым. Вы все еще можете уточнить, что -maxdepththis ( ) не является переносимым / стандартным синтаксисом (только GNU и некоторые BSD). Кроме того, здесь нет смысла использовать \;(запускать по одному grepна файл). Используйте grep -H foo {} +(в зависимости от GNU) или grep foo /dev/null {} +(стандартный), чтобы убедиться, что имя файла всегда печатается. Стандартный эквивалент был -maxdepth 2быfind . -path './*/*' -type d -prune -o -type f -exec ...
Стефан Шазелас

2
Также обратите внимание, что вы будете выдавать сообщения об ошибках для каталогов (в том числе, .если вы этого не сделаете -mindepth 1), в то время как GNU grepне будет пытаться читать каталоги с помощью -r(он повторяется на них). Вы можете добавить -d skipк grep(предполагая , что GNU Grep) или лучше добавить ! -type dк findили даже лучше -type f(или -xtype fпредполагая GNU find) , как вы , вероятно , не хотите grepчитать нерегулярные файлы.
Стефан Шазелас

4
Я склонен использовать grep -Hinс этим подходом, чтобы я мог видеть имя файла и строку, в которой находится вхождение.
GDP2
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.