2016-06-27 4 views
0

Предположим, что я grepping несколько файлов, есть ли способ показать, какой файл grep в настоящее время ищет?Какой файл ищет grep?

Ex:

grep "*.log" file1 file2 file3 file4 

Можно ли определить, какой файл в настоящее время ведется поиск, т.е. file1, file2, file3 и т.д., с помощью Grep и отображать этот вывод?

Спасибо!

+0

Прочитайте [документацию Grep] (HTTP: // WWW .gnu.org/software/grep/manual/grep.html # Output-Line-Prefix-Control) и найдите опцию '--with-filename'. – larsks

+0

вы можете попробовать «найти. -name» * .log "-type f -exec grep" something "{} \;" – mebada

ответ

-1

Использование --with-filename, безусловно, более легкий способ связать результаты с файлом, содержащим результат, но если вы действительно хотите, чтобы увидеть, какой файл grep в настоящее время поиска вы можете просто вызвать его в цикле:

for f in file1 file2 file3 file4; do 
    echo "Searching $f" 
    grep "*.log" "$f" 
done 

Это напечатает имя файла до начала поиска.

+0

Downvoter помочь объяснить? cb0 опубликовал тот же ответ вскоре после меня, это явно общее решение. – dimo414

1

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

-H, --with-filename 
      Print the file name for each match. This is the default when there is more than one file to search. 

Все, что вам нужно сделать, это добавить флаг в вашей команде, как grep -H "*.log" file1 file2 file3 file4 и вы можете наблюдать порядок, в котором grep делает сравнение с образцом в каждой из входных файлов.

0

Если grep не отображает ни одного совпадения, и вы хотите узнать, какой файл он сейчас сканирует, вы можете изучить открытые файлы. Это не портативный, но на Linux, кажется, что дескриптор файла 3 будет один вы хотите проверить, что вы можете сделать с

ls -l /proc/1234/fd/3 

где 1234 является PID в grep процесса.

0

Вы можете использовать простой цикл и globstar для запуска по всем файлам и эхо-имени, а затем grep для вашего шаблона.

for file in ** 
do 
    echo "searching $file" 
    grep "$pattern" "$file" 
done 

Это будет отображать результаты как:

searching file1 
LINE_WITH_PATTERN 
searching file2 
searching file3 
LINE2_WITH_PATTERN 

Если вы хотите найти конкретный файл ...

for file in file1 file2 file3 file4 
Смежные вопросы