Всем доброго времени суток!
Имеется директория, содержащая несколько поддиректорий, некоторые из которых тоже содержат поддиректории. Все это хозяйство набито текстовыми файлами, общим числом где-то под тысячу. Требуется инструмент для контроля вхождений некоторого шаблона в эти файлы. Проблема в том, что отдельные вхождения могут быть закомментированы по правилам Си, т.е. возможны однострочные (//…), и многострочные (/*** … ***/) комменты, которые надо игнорировать.
Выходной формат этого инструмента должен включать путь до файла, в котором найдено вхождение шаблона, номер строки с ним и собственно строку. Подробно поясняю чтобы было понятнее, для чего весь огород.
Итак, инструмент:
grep -IHrn . $SRC | sed '/\/\*.*\*\// d; /\/\*/,/\*\// d; s://.*$::' | grep -w $SHAB
где $SRC - источник, $SHAB - искомый шаблон (текстовая строка без пробелов).
Первый grep по сути только выводит каждый файл построчно и вставляет в начало строк путь к файлу и номер строки. Второй grep выполняет селекцию. А вот sed убирает все комменты из вывода: первая секция - однострочные длинные, вторая - многострочные длинные, третья - однострочные типа //.
И вот тут интересный эффект: если SRC - одиночный файл или небольшая поддирка - все работает правильно. Если SRC большой каталог - часть вывода пропадает, походу из файлов в конце списка. Если убрать sed и оставить grep... | grep... то вывод всегда полный, но с комментами, а с sed-ом - неполный. Проверено на эталонных шаблонах в эталонных файлах.
Кто-нибудь может объяснить что происходит и как с этим бороться без лишней заморочки с разделением на подкаталоги? Я предполагаю что sed не успевает обрабатывать вывод grep-а, захлебывается и в канале теряются буфера.
bash, grep, sed
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Вайбкодю, потихоньку | 0 | 5 | 02-07-2026 |
| 2 | Переменная WINEDLLPATH=«» | 0 | 6 | 02-07-2026 |
| 3 | Регулируй регулярки! Выбираем инструменты для работы с RegEx | 5 | 7 | 25-11-2025 |
| 4 | reqlog – search, track and stream logs | 0 | 5 | 19-06-2026 |
| 5 | wget, curl - не получается скачать файл с пробелами в имени | 0 | 5 | 01-06-2026 |
| 6 | Предложение на Форум | 2 | 3 | 27-06-2026 |
| 7 | Мышка в Линуксе | -5 | 3 | 24-06-2026 |
| 8 | подскажите бесплатную программу для стат. анализа логов access_log_site | 0 | 3 | 06-03-2026 |
| 9 | 9 Best Free and Open Source Console Log File Analyzers | 0 | 5 | 23-06-2026 |