Возможно ли изменить цвет шрифта в терминале, не влияя на формат вставки printf "%*s"?

Дешевый и удобный способ поиска нескольких шаблонов с помощью grep:

$ echo "foo" > ewq ; echo "bar" >> ewq ; grep -H -f ewq *.txt ; rm ewq
7
26.03.2017, 14:48
2 ответа

Вы делаете это намного сложнее, чем должно быть. Вы можете обрабатывать выравнивание с помощью $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, вам может понадобиться другой подход. пожать плечами

8
27.01.2020, 20:17

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].%'
1
27.01.2020, 20:17

Теги

Похожие вопросы