Чи я можу сказати grep, щоб надрукувати кожен прочитаний рядок незалежно від відповідності?
Опція -C999зробить трюк за відсутності можливості відображення всіх рядків контексту. Більшість інших варіантів grep також підтримують це. Однак: 1) вихід не виробляється, коли не знайдено збігу, і 2) цей параметр негативно впливає на ефективність grep: коли -Cзначення велике, можливо, багато рядків, можливо, доведеться тимчасово зберігати в пам'яті для grep, щоб визначити, які рядки контексту відображатись, коли відбувається збіг. Зауважте, що реалізація grep не завантажує вхідні файли, а читає кілька рядків або використовує розсувне вікно над входом. Контекст "до частини" повинен зберігатися у вікні (пам'яті), щоб виводити рядки контексту "до" пізніше, коли буде знайдено збіг.
Шаблон, наприклад, ^|PATTERNабо PATTERN|$будь-який підкадрування з порожнім узгодженням для цього питання, такий як [^ -~]?|PATTERNхороший трюк. Однак 1) ці шаблони не показують невідповідні рядки, виділені як контекст, і 2) це не можна використовувати в поєднанні з деякими іншими варіантами grep, такими як -Fі-w , наприклад.
Тож жоден із цих підходів мене не влаштовує. Я використовую ugrep та посилений grep з можливістю -yефективно відображати всі невідповідні результати як кольорові виділені контекстні лінії. Інші інструменти, подібні до грепу, такі як ag та ripgrep, також пропонують можливість проходу. Але ugrep сумісний з GNU / BSD grep та пропонує безліч варіантів grep, таких як -yі -Q. Наприклад, ось, що -yвідображається у поєднанні з -Q(інтерактивний інтерфейс запиту для введення шаблонів):
ugrep -Q -y FILE ...
sed.sedрішення отримує вас кілька кольорів за рахунок додаткової складності (замість приблизно 30 символів , що мають близько 60 символів).