grep-подобный инструмент, который окрашивает / окрашивает, но не фильтрует?

В течение многих лет я замечал, что GNU grep в Unixes (не только в разновидностях Linux) обнаружил, что я использовал интерактивный TERM с поддержкой цвета, например, xterm/gnome-terminal/kconsole, и красиво раскрасил мои поисковые выражения в контексте.

Что может быть простым инструментом cli, который только подчеркивает или выделяет ваше регулярное выражение или простую строку поиска, но, в отличие от grep, иначе не фильтрует строки? Может быть, уловка Sed может сделать это, что я могу псевдоним и более поздние команды канала?

ПРИМЕР

Поэтому я написал программу pricehist.sh, которая обычно создает CSV-подобные данные для другой программы, но я часто визуально проверяю ее так:

./pricehist.sh mostalexp-GPW  28 |sort -r -g -k 3 -t ' ' |column -t -s", "
MOSTALEXP,20120222,0.78,0.79,0.76,0.77,63900,0.77    0.04000   5.00000   -0.01000  -1.25000  49203
MOSTALEXP,20120203,0.82,0.82,0.78,0.78,446089,0.78   0.04000   4.87805   0         0         347949
MOSTALEXP,20120124,0.71,0.71,0.69,0.71,61478,0.71    0.03000   4.16667   -0.01000  -1.38889  43649
MOSTALEXP,20120130,0.73,0.73,0.70,0.73,59488,0.73    0.03000   4.10959   0         0         43426
MOSTALEXP,20120210,0.79,0.81,0.77,0.81,104120,0.81   0.03000   3.75000   0.01000   1.25000   84337
MOSTALEXP,20120213,0.80,0.80,0.78,0.80,86606,0.80    0.03000   3.70370   -0.01000  -1.23457  69284
MOSTALEXP,20120126,0.69,0.75,0.69,0.72,146353,0.72   0.02000   2.81690   0.04000   5.63380   105374
MOSTALEXP,20120131,0.72,0.73,0.71,0.72,72734,0.72    0.02000   2.73973   0         0         52368
MOSTALEXP,20120123,0.72,0.73,0.71,0.72,24133,0.72    0.02000   2.73973   0         0         17375
MOSTALEXP,20120214,0.78,0.81,0.78,0.79,56990,0.79    0.02000   2.50000   0.01000   1.25000   45022
MOSTALEXP,20120209,0.79,0.82,0.79,0.80,65243,0.80    0.02000   2.46914   0.01000   1.23457   52194
MOSTALEXP,20120118,0.69,0.70,0.68,0.69,62520,0.69    0.01000   1.44928   0.01000   1.44928   43138
MOSTALEXP,20120125,0.70,0.71,0.70,0.71,92317,0.71    0.01000   1.40845   0         0         65545
MOSTALEXP,20120201,0.71,0.74,0.71,0.74,199791,0.74   0.01000   1.38889   0.02000   2.77778   147845
MOSTALEXP,20120127,0.73,0.73,0.71,0.73,38157,0.73    0.01000   1.38889   0.01000   1.38889   27854
MOSTALEXP,20120207,0.78,0.79,0.77,0.79,56243,0.79    0.01000   1.28205   0.01000   1.28205   44431
MOSTALEXP,20120206,0.78,0.80,0.77,0.78,133597,0.78   0.01000   1.28205   0.02000   2.56410   104205
MOSTALEXP,20120221,0.81,0.81,0.79,0.80,112738,0.80   0.01000   1.25000   0.01000   1.25000   90190
MOSTALEXP,20120217,0.80,0.85,0.79,0.80,272245,0.80   0.01000   1.25000   0.05000   6.25000   217796
MOSTALEXP,20120216,0.81,0.81,0.79,0.80,30814,0.80    0.01000   1.25000   0.01000   1.25000   24651
MOSTALEXP,20120113,0.66,0.66,0.65,0.65,90267,0.65    0.00500   0.76336   0.00500   0.76336   58673
MOSTALEXP,20120220,0.80,0.82,0.80,0.80,83881,0.80    0         0         0.02000   2.50000   67104
MOSTALEXP,20120215,0.80,0.82,0.79,0.80,128714,0.80   0         0         0.03000   3.79747   102971
MOSTALEXP,20120208,0.79,0.84,0.79,0.81,280446,0.81   0         0         0.05000   6.32911   227161
MOSTALEXP,20120120,0.74,0.74,0.72,0.73,128831,0.73   0         0         0.02000   2.77778   94046
MOSTALEXP,20120117,0.67,0.71,0.67,0.69,284886,0.69   0         0         0.04000   5.97015   196571
MOSTALEXP,20120116,0.65,0.67,0.65,0.67,9548,0.67     0         0         0.02000   3.07692   6397
MOSTALEXP,20120202,0.75,0.87,0.75,0.82,1270955,0.82  -0.01000  -1.35135  0.13000   17.56757  1042183
MOSTALEXP,20120119,0.70,0.74,0.70,0.72,320471,0.72   -0.01000  -1.44928  0.05000   7.24638   230739

В конце трубы (после |column -t) было бы неплохо добавить что-то, что выделяет хотя бы строку $(date +%Y%m%d), который на данный момент оценивается в 20120222

Другой пример tail -F /tmp/*.log | grep -C 9999 YouJustGotHacked за исключением того, что я не хотел бы, чтобы grep фактически отфильтровывал любые строки, просто сделайте YouJustGotHacked намного проще, чтобы обнаружить шум.

4 ответа

Решение

Ты можешь использовать egrep и сопоставьте как шаблон, который вы ищете, так и начало линии. Поскольку последний всегда совпадает, но не может быть окрашен, он подражает тому, что вы ищете.

egrep 'pattern|^' file

Изменить: я первоначально узнал об этом из ответа на этот вопрос.

grep имеет -C опция, которая может отображать контексты вокруг совпадающих строк. Вы можете воспользоваться этим.

grep -C 9999 'pattern' file

sed уловка, которую вы ищете, должна быть примерно такой:

sed 's/pattern/\x1b[01;31m&\x1b[0m/g' file

где:

  • pattern это то же самое, что вы использовали бы в grep
  • & в шаблоне замены означает использовать тот же текст, что и соответствующий
  • персонажи окружающие & используются для установки красного цвета переднего плана и сброса его впоследствии

Больше информации о том, как избежать цветовых последовательностей в sed в ответах на этот вопрос.

Чтобы расширить на less Опция, упомянутая shellter (которая работает хорошо, если вы просто хотите визуально изучить раскрашенный вывод и не передавать его в другую программу), вот шаги:

  1. Передайте ваш вывод less (или запустить less filename.txt).
  2. Нажмите / искать вперед (или ? искать в обратном направлении).
  3. Введите условие поиска (регулярное выражение по умолчанию или нажмите Ctrl-r сначала переключиться на использование простой строки). Нажмите Enter,
  4. Поисковый термин будет выделен. Нажмите n перейти к следующему вхождению или N перейти к предыдущему.
  5. Нажмите q выйти
Другие вопросы по тегам