所以我正在尝试为@if(!Request::ajax())
// all layout code
@else
@yield('content')
@endif
创建一个别名,它将通过cal
运行它以将当前日期包裹在终端转义中为红色。
sed
但是,我显然不能在捕获组内部使用cal | sed "s/($(date +%d))/\\033\[94m$(date +%d)\\033\[0m/g"
之类的内联命令执行。
另外,如果我在两个地方使用命令替换,我可以让替换工作,但不能使用反斜杠来转义颜色代码。
$(date +%d)
有没有办法用颜色包装替换品?另外,有没有更好的正则表达式来处理单个数字天? (由于在该月的第一天到第九天,它将突出显示该日历上该数字的每个实例。)
编辑:我正在运行OS X,Darwin内核版本15.2.0,因为显然OS X上的cal实现不支持$ 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
选项。
答案 0 :(得分:2)
尝试:
cal -h | sed "s/$(date +%d)/"$'\033\[94m&\033\[0m/g'
注意:
默认情况下,cal
会突出显示当天。我使用-h
选项将其关闭,因此它不会干扰您的首选颜色。 [更新:显然这仅适用于GNU cal
]
你是对的$(date +%d)
必须出现在双引号中。然而,命令的其余部分却没有。上面,我使用bash的$'...'
作为命令的其余部分,因为它支持转义序列。
不需要第二个$(date +%d)
。我们可以使用&
调用匹配的文字。
如果你有GNU sed,修复单位数日期问题的一种便捷方法是使用\<...\>
要求匹配的文字是一个完整的单词:
cal -h | sed "s/\<$(date +%d)\>/"$'\033\[94m&\033\[0m/g' # GNU
如果您的sed没有该功能,则需要s
命令:
cal -h | sed "s/ $(date +%d) /"$'\033\[94m&\033\[0m/g; '"s/ $(date +%d)$/"$'\033\[94m&\033\[0m/g'
第一个替换命令查找由空格包围的日期。这适用于除一行末尾的所有单个数字日期。第二个查找以空格开头的日期,然后是行的末尾($
)。