У меня есть серия индексных файлов для некоторых файлов данных, которые в основном берут формат
индексный файл: asdfg.log.1234.2345.index
файл данных: asdfg.log
Идея состоит в том, чтобы сделать поиск всех индексных файлов. Если значение XXXX появляется в индексном файле, пойдите и grep его соответствующий файл данных и распечатайте строку в файле данных, где значение XXXX появляется.
До сих пор я могу просто искать индексные файлы значение XXXX, например.
find . -name "*.index" | xargs grep "XXXX" // Gives me a list of the index files with XXXX in them
Как я беру соответствие индексного файла и затем grep его соответствующий файл данных?
Это помогает?
find . -name '*.index' |
xargs grep -l "XXXX" |
sed 's/\.log\.*/.log/' |
xargs grep "XXXX"
Команда find
взята из вашего примера. Первый xargs grep
перечисляет только (индексные) имена файлов. sed
сопоставляет имена файлов с именами файлов данных. Затем второй xargs grep
сканирует файлы данных.
Возможно, вы захотите вставить шаг sort -u
после шага sed
.
grep -l "XXXX" *.index | while read -r FOUND
do
if [ -f "${FOUND%.log*}log" ];then
grep "XXXX" "$FOUND"
fi
done