Как может я форматировать вывод от искаженной команды ('погода EPWR')?

Я создал псевдоним в ~/.bashrc, который выполняется weather EPWR который дает мне текущую информацию о погоде в следующей форме:

jjj:~$ do-I-need-a-jacket 
Searching via station...
[caching result Wroclaw Ii, Poland]
Current conditions at Wroclaw Ii, Poland (EPWR) 51-06N 016-53E 121M
   Last updated Nov 19, 2015 - 07:00 AM EST / 2015.11.19 1200 UTC
   Temperature: 53 F (12 C)
   Relative Humidity: 76%
   Wind: from the WNW (290 degrees) at 18 MPH (16 KT)
   Weather: Cumulonimbus clouds observed
   Sky conditions: partly cloudy

(тот же текст как снимок экрана на imgur.com или простом тексте на pastebin.com)

Какие шаги я должен сделать для настройки этого вывода так, чтобы температуры были выделены красные и влажность, например, синие? Кто-то может уточнить?

3
задан 19 November 2015 в 15:43

2 ответа

Можно передать вывод по каналу do-i-need-a-jacket к этой команде Perl:

perl -ne 'if(/^(   Temperature: )(.*)/){print("$1\e[31m$2\e[0m\n")}elsif(/^(   Relative Humidity: )(.*)/){print("$1\e[34m$2\e[0m\n")}else{print}'

Расширенный в сценарий:

#!/usr/bin/perl

use strict;
use warnings;

-t STDIN && exit;

while(<STDIN>) {
    if(/^(   Temperature: )(.*)/) {
        print("$1\e[31m$2\e[0m\n")
    }
    elsif(/^(   Relative Humidity: )(.*)/) {
        print("$1\e[34m$2\e[0m\n")
    }
    else {
        print
    }
}

s1

Вы можете colorize другие строки с другими цветами путем добавления другого elsif блоки после if блок и перед else блок (необходимо будет поменять струну для соответствия и escape-последовательность цвета ANSI для соответствия требуемому цвету):

elsif(/^(   Temperature: )(.*)/) { # Change this to the string to match ("Wind", "Weather", "Sky conditions", ...)
    print("$1\e[31m$2\e[0m\n") # Change this to the ANSI color escape sequence to match the desired color
}

Список возможного ANSI окрашивают escape-последовательности:

s2

1
ответ дан 1 December 2019 в 17:00

Используя "Цветные стекла Regex" от Взломы Linux , вот два пути:

# Colors the whole line
weather EPWR | rcg 'Temperature.* 

или

# Color the values 
weather EPWR | rcg '\-?\d+ F \(\-?\d+ C\)' "RED" '\d+%' "BLUE"

Вот то, что производит последняя команда:

$ weather EPWR | rcg '\-?\d+ F \(\-?\d+ C\)' "RED" '\d+%' "BLUE"|od -bc
0000000 123 145 141 162 143 150 151 156 147 040 166 151 141 040 163 164
          S   e   a   r   c   h   i   n   g       v   i   a       s   t
0000020 141 164 151 157 156 056 056 056 012 133 143 141 143 150 151 156
          a   t   i   o   n   .   .   .  \n   [   c   a   c   h   i   n
0000040 147 040 162 145 163 165 154 164 040 127 162 157 143 154 141 167
          g       r   e   s   u   l   t       W   r   o   c   l   a   w
0000060 040 111 151 054 040 120 157 154 141 156 144 135 012 103 165 162
              I   i   ,       P   o   l   a   n   d   ]  \n   C   u   r
0000100 162 145 156 164 040 143 157 156 144 151 164 151 157 156 163 040
          r   e   n   t       c   o   n   d   i   t   i   o   n   s    
0000120 141 164 040 127 162 157 143 154 141 167 040 111 151 054 040 120
          a   t       W   r   o   c   l   a   w       I   i   ,       P
0000140 157 154 141 156 144 040 050 105 120 127 122 051 040 065 061 055
          o   l   a   n   d       (   E   P   W   R   )       5   1   -
0000160 060 066 116 040 060 061 066 055 065 063 105 040 061 062 061 115
          0   6   N       0   1   6   -   5   3   E       1   2   1   M
0000200 012 114 141 163 164 040 165 160 144 141 164 145 144 040 116 157
         \n   L   a   s   t       u   p   d   a   t   e   d       N   o
0000220 166 040 061 071 054 040 062 060 061 065 040 055 040 060 061 072
          v       1   9   ,       2   0   1   5       -       0   1   :
0000240 060 060 040 120 115 040 105 123 124 040 057 040 062 060 061 065
          0   0       P   M       E   S   T       /       2   0   1   5
0000260 056 061 061 056 061 071 040 061 070 060 060 040 125 124 103 012
          .   1   1   .   1   9       1   8   0   0       U   T   C  \n
0000300 040 040 040 124 145 155 160 145 162 141 164 165 162 145 072 040
                      T   e   m   p   e   r   a   t   u   r   e   :    
0000320 033 133 063 061 155 065 063 040 106 040 050 061 062 040 103 051
        033   [   3   1   m   5   3       F       (   1   2       C   )
0000340 033 133 060 155 012 040 040 040 122 145 154 141 164 151 166 145
        033   [   0   m  \n               R   e   l   a   t   i   v   e
0000360 040 110 165 155 151 144 151 164 171 072 040 033 133 063 064 155
              H   u   m   i   d   i   t   y   :     033   [   3   4   m
0000400 066 066 045 033 133 060 155 012 040 040 040 127 151 156 144 072
          6   6   % 033   [   0   m  \n               W   i   n   d   :
0000420 040 146 162 157 155 040 164 150 145 040 127 040 050 062 067 060
              f   r   o   m       t   h   e       W       (   2   7   0
0000440 040 144 145 147 162 145 145 163 051 040 141 164 040 061 062 040
              d   e   g   r   e   e   s   )       a   t       1   2    
0000460 115 120 110 040 050 061 060 040 113 124 051 012
          M   P   H       (   1   0       K   T   )  \n
0000474

не заново изобретают колеса - находят, что копирует.

"RED" 'Relative Humidity.*' "BLUE"

или

# Color the values 
weather EPWR | rcg '\-?\d+ F \(\-?\d+ C\)' "RED" '\d+%' "BLUE"

Вот то, что производит последняя команда:

$ weather EPWR | rcg '\-?\d+ F \(\-?\d+ C\)' "RED" '\d+%' "BLUE"|od -bc
0000000 123 145 141 162 143 150 151 156 147 040 166 151 141 040 163 164
          S   e   a   r   c   h   i   n   g       v   i   a       s   t
0000020 141 164 151 157 156 056 056 056 012 133 143 141 143 150 151 156
          a   t   i   o   n   .   .   .  \n   [   c   a   c   h   i   n
0000040 147 040 162 145 163 165 154 164 040 127 162 157 143 154 141 167
          g       r   e   s   u   l   t       W   r   o   c   l   a   w
0000060 040 111 151 054 040 120 157 154 141 156 144 135 012 103 165 162
              I   i   ,       P   o   l   a   n   d   ]  \n   C   u   r
0000100 162 145 156 164 040 143 157 156 144 151 164 151 157 156 163 040
          r   e   n   t       c   o   n   d   i   t   i   o   n   s    
0000120 141 164 040 127 162 157 143 154 141 167 040 111 151 054 040 120
          a   t       W   r   o   c   l   a   w       I   i   ,       P
0000140 157 154 141 156 144 040 050 105 120 127 122 051 040 065 061 055
          o   l   a   n   d       (   E   P   W   R   )       5   1   -
0000160 060 066 116 040 060 061 066 055 065 063 105 040 061 062 061 115
          0   6   N       0   1   6   -   5   3   E       1   2   1   M
0000200 012 114 141 163 164 040 165 160 144 141 164 145 144 040 116 157
         \n   L   a   s   t       u   p   d   a   t   e   d       N   o
0000220 166 040 061 071 054 040 062 060 061 065 040 055 040 060 061 072
          v       1   9   ,       2   0   1   5       -       0   1   :
0000240 060 060 040 120 115 040 105 123 124 040 057 040 062 060 061 065
          0   0       P   M       E   S   T       /       2   0   1   5
0000260 056 061 061 056 061 071 040 061 070 060 060 040 125 124 103 012
          .   1   1   .   1   9       1   8   0   0       U   T   C  \n
0000300 040 040 040 124 145 155 160 145 162 141 164 165 162 145 072 040
                      T   e   m   p   e   r   a   t   u   r   e   :    
0000320 033 133 063 061 155 065 063 040 106 040 050 061 062 040 103 051
        033   [   3   1   m   5   3       F       (   1   2       C   )
0000340 033 133 060 155 012 040 040 040 122 145 154 141 164 151 166 145
        033   [   0   m  \n               R   e   l   a   t   i   v   e
0000360 040 110 165 155 151 144 151 164 171 072 040 033 133 063 064 155
              H   u   m   i   d   i   t   y   :     033   [   3   4   m
0000400 066 066 045 033 133 060 155 012 040 040 040 127 151 156 144 072
          6   6   % 033   [   0   m  \n               W   i   n   d   :
0000420 040 146 162 157 155 040 164 150 145 040 127 040 050 062 067 060
              f   r   o   m       t   h   e       W       (   2   7   0
0000440 040 144 145 147 162 145 145 163 051 040 141 164 040 061 062 040
              d   e   g   r   e   e   s   )       a   t       1   2    
0000460 115 120 110 040 050 061 060 040 113 124 051 012
          M   P   H       (   1   0       K   T   )  \n
0000474

не заново изобретают колеса - находят, что копирует.

1
ответ дан 1 December 2019 в 17:00

Другие вопросы по тегам:

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