我在中创建了一个别名~/.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
}
}
elsif
您可以通过在块之后if
和块之前添加其他块来用其他颜色为其他线条着色else
(您必须更改要匹配的字符串并更改 ANSI 颜色转义序列以匹配所需的颜色):
elsif(/^( 温度: )(.*)/) { # 将其更改为要匹配的字符串(“Wind”、“Weather”、“Sky conditions”...) 打印(“$1\e[31分钟$2\e[0m\n") # 将其更改为 ANSI 颜色转义序列以匹配所需的颜色 }
可能的 ANSI 颜色转义序列列表:
答案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
不要重新发明轮子 - 找到一个可以复制的。