如何格式化别名命令(“weather EPWR”)的输出?

如何格式化别名命令(“weather 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 上的纯文本

我需要采取哪些步骤来自定义此输出,以便温度以红色突出显示,湿度以蓝色突出显示?有人可以详细说明吗?

答案1

您可以将输出通过管道传输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

elsif您可以通过在块之后if和块之前添加其他块来用其他颜色为其他线条着色else(您必须更改要匹配的字符串并更改 ANSI 颜色转义序列以匹配所需的颜色):

elsif(/^(   温度: )(.*)/) { # 将其更改为要匹配的字符串(“Wind”、“Weather”、“Sky conditions”...)
    打印(“$1\e[31分钟$2\e[0m\n") # 将其更改为 ANSI 颜色转义序列以匹配所需的颜色
}

可能的 ANSI 颜色转义序列列表:

s2

答案2

使用“正则表达式有色眼镜”Linux 黑客,这里提供两种方法:

# Colors the whole line
weather EPWR | rcg 'Temperature.*$' "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

不要重新发明轮子 - 找到一个可以复制的。

相关内容