Мне нужно искать первые 50 строк каждого файла в каталоге и его подкаталогах.
Это сделает рекурсивную часть, но как ограничить только первые 50 строк каждого файла?
grep -r "matching string here" .
Некоторые из этих файлов огромны, и я хочу, чтобы они совпадали только в первых 50 строках. Я пытаюсь ускорить процесс, не ища мегабайты двоичных данных в некоторых файлах.
Ответы:
Если вы просто хотите файлы, которые соответствуют:
или
Если вы хотите только соответствующие строки:
или лучше,
И если вы хотите оба:
Замечания.
sed
а не комбоhead
-grep
.-exec ... +
в каждом методе, но тогда вам придется самостоятельно кодировать свой внутренний цикл! (тривиальное упражнение оставлено читателю). Это может быть немного более эффективно, если у вас есть файлы gazillion.источник
Если вам нужен вывод grep, как в оригинале, вы можете сделать:
Если вам нужны только имена файлов, вы можете заменить 2-й grep на
echo "$f"
.источник
Вам нужно будет объединить несколько разных утилит, чтобы получить желаемую функциональность. Используйте
find
команду, чтобы просмотреть каталоги, найти все файлы и выполнитьhead
команду для каждого найденного файла.head
Команда может быть использована для дампа только первые 50 строк каждого файла. Наконец, направьте вывод в grep для поиска нужной вам строки.find . -type f -exec head -n 50 {} ";" | grep "matching string here"
источник