查找并替换当前文本以用颜色包裹
Find And Replace Current Text to Wrap In Color
所以我正在尝试为 cal
创建一个别名,它将 运行 通过 sed
将当前日期包装在红色的终端转义符中。
cal | sed "s/($(date +%d))/\033\[94m$(date +%d)\033\[0m/g"
但是,我显然不能在捕获组内使用像 $(date +%d)
这样的内联命令执行。
此外,如果我在两个地方都使用命令替换,我可以让替换工作,但不能使用反斜杠来转义颜色代码。
$ cal | sed "s/$(date +%d)/\033\[94m$(date +%d)\033\[0m/g"
May 2016
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 033[94m11033[0m 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
有没有办法用颜色包装替代品?此外,是否有更好的正则表达式来处理个位数天数? (因为在每月的第一天到第九天,它会在日历上突出显示该数字的每个实例。)
编辑:我是 运行ning OS X,达尔文内核版本 15.2.0,因为显然 OS X 上的 cal 实现不支持 -h
选项。
尝试:
cal -h | sed "s/$(date +%d)/"$'3\[94m&3\[0m/g'
备注:
默认情况下,cal
突出显示当天。我使用 -h
选项将其关闭,这样它就不会干扰您喜欢的颜色。 [更新:显然这仅适用于 GNU cal
]
你是对的 $(date +%d)
必须出现在双引号中。但是,命令的其余部分没有。在上面,我使用 bash 的 $'...'
作为命令的其余部分,因为它支持转义序列。
不需要一秒钟$(date +%d)
。我们可以用 &
.
调用匹配的文本
如果你有 GNU sed,解决个位数日期问题的一种简便方法是使用 \<...\>
:
要求匹配的文本是一个完整的单词
cal -h | sed "s/\<$(date +%d)\>/"$'3\[94m&3\[0m/g' # GNU
如果您的 sed 没有该功能,您将需要 s
命令:
cal -h | sed "s/ $(date +%d) /"$'3\[94m&3\[0m/g; '"s/ $(date +%d)$/"$'3\[94m&3\[0m/g'
第一个替换命令查找被 space 包围的日期。这适用于除行尾的日期之外的所有个位数日期。第二个查找以 space 开头且后跟行尾 ($
).
的日期
所以我正在尝试为 cal
创建一个别名,它将 运行 通过 sed
将当前日期包装在红色的终端转义符中。
cal | sed "s/($(date +%d))/\033\[94m$(date +%d)\033\[0m/g"
但是,我显然不能在捕获组内使用像 $(date +%d)
这样的内联命令执行。
此外,如果我在两个地方都使用命令替换,我可以让替换工作,但不能使用反斜杠来转义颜色代码。
$ cal | sed "s/$(date +%d)/\033\[94m$(date +%d)\033\[0m/g"
May 2016
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 033[94m11033[0m 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
有没有办法用颜色包装替代品?此外,是否有更好的正则表达式来处理个位数天数? (因为在每月的第一天到第九天,它会在日历上突出显示该数字的每个实例。)
编辑:我是 运行ning OS X,达尔文内核版本 15.2.0,因为显然 OS X 上的 cal 实现不支持 -h
选项。
尝试:
cal -h | sed "s/$(date +%d)/"$'3\[94m&3\[0m/g'
备注:
默认情况下,
cal
突出显示当天。我使用-h
选项将其关闭,这样它就不会干扰您喜欢的颜色。 [更新:显然这仅适用于 GNUcal
]你是对的
$(date +%d)
必须出现在双引号中。但是,命令的其余部分没有。在上面,我使用 bash 的$'...'
作为命令的其余部分,因为它支持转义序列。不需要一秒钟
$(date +%d)
。我们可以用&
. 调用匹配的文本
如果你有 GNU sed,解决个位数日期问题的一种简便方法是使用
要求匹配的文本是一个完整的单词\<...\>
:cal -h | sed "s/\<$(date +%d)\>/"$'3\[94m&3\[0m/g' # GNU
如果您的 sed 没有该功能,您将需要
s
命令:cal -h | sed "s/ $(date +%d) /"$'3\[94m&3\[0m/g; '"s/ $(date +%d)$/"$'3\[94m&3\[0m/g'
第一个替换命令查找被 space 包围的日期。这适用于除行尾的日期之外的所有个位数日期。第二个查找以 space 开头且后跟行尾 (
$
). 的日期