2015-07-22 4 views
1

У меня есть каталог с большим количеством файлов. Я пытаюсь найти текст, расположенный по крайней мере в одном из файлов. Текст, вероятно, находится в одном из последних файлов. Что это за команда? Я думал, что это будет выглядеть примерно как ls -t | head -5 | grep abaaba.Grep внутри файлов, возвращенных из ls и head

Например, если у меня есть 5 файлов вернулся из ls -t | head -5: - file1, file2, file3, file4, file5, мне нужно знать, какие из этих файлов содержит abaaba.

+2

Обычно, если у вас нет пробелов (пробелов, табуляций, строк новой строки и т. Д.) В именах файлов или имен каталогов, то: 'ls -t | head -5 | xargs grep abaaba'. Если у вас есть свободное пространство вокруг, вам нужно больше работать; не ясно, что 'ls' является частью ответа (это, скорее, часть проблемы). –

+0

xargs: abaaba: no такой файл или каталог – KPrince36

+2

Включили ли вы 'xargs grep abaaba'? Звучит так, будто вы опустили 'grep'. –

ответ

3

Непонятно, что вы пытаетесь сделать. Но я полагаю, что ваша главная цель - эффективность. Я бы использовал что-то вроде:

ls -t | while read -r f; do grep -lF abaaba "$f" && break;done 

Это будет печатать только первый файл, содержащий строку, и останавливает поиск. Если вы хотите видеть, что фактические строки используют -H вместо -l. И если у вас есть регулярное выражение вместо простого перетаскивания строки -F, это приведет к тому, что grep будет работать медленнее.

ls -t | while read -r f; do grep -H abaaba "$f" && break;done 

Конечно, если вы хотите, чтобы продолжить поиск Я предложил бы сбросив «& & перерыв».

ls -t | while read -r f; do grep -HF abaaba "$f";done 

Если у вас есть какие-то представления о сроках, рекомендуется попробовать найти.

find . -maxdepth 1 -type f -mtime -2 -exec grep -HF abaaba {} \; 

Вы можете увеличить число после -mtime до более чем за последние 2 дня.

+1

Используя ваши команды, вы потеряете информацию об именах файлов. Кажется, что проблема состоит в том, чтобы найти эти имена файлов, поэтому, на мой взгляд, лучше использовать 'grep -H'. – MaxChinni

+0

@MaxChinni Вы правы, добавили в сообщение. –

0

Если вы просто делаете это в интерактивном режиме, и вы знаете, что вы не имеете пробелы в ваших именах файлов, то вы можете сделать:

grep abaaba $(ls -t | head -5) # DO NOT USE THIS IN A SCRIPT 

Если пишу это в качестве псевдонима или для повторного использования в будущем, сделайте это «правильный» способ, который требует большего набора текста, но это не разбивает пространства и другие вещи в именах файлов.