2015-10-08 2 views
0

Предположим, у меня есть f файлов.Grep из нескольких файлов и получить первые n строк каждого вывода

Из каждого файла я хочу grep образец.

Я просто хочу, чтобы n совпадений в шаблонах из каждого файла.

Что у меня есть:

strings <files_*> | grep <pattern> | head -<n>

мне нужно использовать strings, потому что я имею дело с двоичными файлами, и из этой команды я получаю только n линии от общего количества.

ответ

1

grep имеет опцию -mX, которая позволяет указать, сколько совпадений. Однако, добавив это в вашу командную строку, вы остановитесь на первом совпадении X всего ... не на файл.

Чтобы получить для каждого файла счет, я пришел с этим:

for FILE in `ls -f <files_*>` ; do strings "$FILE" | grep -m<X> <pattern> ; done 

Пример (поиск «аа» файлы, которые соответствуют х * и возвращающимся до 3-х линий от каждого будет:

for FILE in `ls -f x*` ; do strings "$FILE" | grep -m3 aa ; done 
+0

Великого ответа. Спасибо! – drum

1

Что касается меня, у меня есть каталог журналов, в котором есть много файлов журнала с именем info.log ~ info.log.3. Я хочу, чтобы grep каждый файл за ключевое слово «текущий» и распечатывал последнюю строку в каждом файле.

Смотрите пример ниже:

for file in info.log*;do echo $file ; grep 'current' $file |tail -n 1 ;done 

выход, как показано ниже

info.log 

2017-10-15 18:03:30 - loggers - INFO - send_worker_heart_beat current listen len 33 

info.log.1 

2017-10-15 18:03:29 - loggers - INFO - send_worker_heart_beat current listen len 33 

info.log.2 

2017-10-15 18:03:11 - loggers - INFO - send_worker_heart_beat current listen len 34 

info.log.3