Дешевый и удобный способ поиска нескольких шаблонов с помощью grep:
$ echo "foo" > ewq ; echo "bar" >> ewq ; grep -H -f ewq *.txt ; rm ewq
Вы делаете это намного сложнее, чем должно быть. Вы можете обрабатывать выравнивание с помощью $message
и не заботиться о ширине последовательностей ANSI:
#! /usr/bin/env bash
message() {
[ x"$2" = xOK ] && color=2 || color=1
let offset=$(tput cols)-4-${#2}
printf "%-*s[ %s%s%s ]\n" $offset "$1" "$(tput setaf "$color")" "$2" "$(tput sgr0)"
}
message "install font library" "OK"
message "update configuration file on server" "ERR"
Изменить: Обратите внимание, что большинство реализаций printf(1)
не справляются хорошо с вычислениями длин для многобайтовых кодировок. Поэтому, если вы хотите печатать сообщения с акцентированными символами в UTF-8, вам может понадобиться другой подход. пожать плечами
an простой подход - раскрасить все после того, как оно было выровнено
Вкратце, вам понадобится
функция (или, лучше, внешний скрипт) для раскрашивания строки цветами (например, с помощью perl s, $ regex, $ color $ & $ resetcolor, gi
, и вы называете его после , вы выполнили печать. escape-коды цвета не изменят выравнивание таким образом.
например: предположим, вы создали сценарий с именем «colorize», который принимает аргументы цвета, за которыми следуют регулярные выражения, которые нужно раскрасить этим цветом: например colorize -blue 'regex1' -green 'regex2'
вы вызывайте его при необходимости:
{ code
that
formats and display things
} | colorize -red 'ERR' -green 'OK'
Имея это как сценарий, вы можете использовать его везде, например:
df -h | colorize -red '[890].%'