Como posso formatar a saída de um comando com alias ('weather EPWR')?

3

Eu criei um alias em ~/.bashrc , que executa weather EPWR , o que me fornece informações atuais sobre o clima da seguinte forma:

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

(mesmo texto como captura de tela em imgur.com ou plain text on pastebin.com )

Quais etapas devo tomar para personalizar essa saída para que as temperaturas fiquem destacadas em vermelho e umidade, por exemplo, azul? Alguém pode elaborar?

    
por bowl 19.11.2015 / 13:24

2 respostas

1

Você pode canalizar a saída de do-i-need-a-jacket para esse comando Perl:

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

Expandido em um script:

#!/usr/bin/perl

use strict;
use warnings;

-t STDIN && exit;

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

Você pode colorir outras linhas com outras cores adicionando outros blocos elsif após o bloco if e antes do bloco else (você precisará alterar a sequência para corresponder e a sequência de escape de cor ANSI para corresponder a cor desejada):

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

Lista de possíveis seqüências de escape de cores ANSI:

    
por kos 19.11.2015 / 14:04
1

Usando "Regex Colored Glasses" de Linux Hacks , aqui estão duas maneiras:

# Colors the whole line
weather EPWR | rcg 'Temperature.*$' "RED" 'Relative Humidity.*' "BLUE"

ou

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

Veja o que o último comando produz:

$ 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

Não reinvente rodas - encontre uma para copiar.

    
por waltinator 19.11.2015 / 19:23