Bash найти прикованный к grep, который затем печатает - PullRequest
7 голосов
/ 20 июля 2010

У меня есть ряд индексных файлов для некоторых файлов данных, которые в основном принимают формат

индексный файл: asdfg.log.1234.2345.index

файл данных: asdfg.log

Идея состоит в том, чтобы выполнить поиск по всем индексным файлам.Если значение XXXX появляется в индексном файле, перейдите к соответствующему файлу данных и найдите в нем строку данных, в которой появляется значение XXXX.

До сих пор я мог просто искать в индексных файлах значениеXXXX Например,

find . -name "*.index" | xargs grep "XXXX"     // Gives me a list of the index files with XXXX in them

Как получить соответствие файла индекса, а затем выполнить поиск соответствующего файла данных?

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

Это делает трюк?

find . -name '*.index' |
xargs grep -l "XXXX" |
sed 's/\.log\.*/.log/' |
xargs grep "XXXX"

Команда find из вашего примера. В первом xargs grep перечислены только (индексные) имена файлов. sed отображает имена файлов на имена файлов данных. Второй xargs grep затем сканирует файлы данных.

Возможно, вы захотите вставить шаг sort -u после шага sed.

0 голосов
/ 20 июля 2010
grep -l "XXXX" *.index | while read -r FOUND
do
   if [ -f "${FOUND%.log*}log" ];then
      grep "XXXX" "$FOUND"
   fi
done 
...