Чи я можу сказати 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 символів).