gpt4 book ai didi

bash - 查找并替换当前文本以用颜色包裹

转载 作者:行者123 更新时间:2023-12-05 04:13:33 25 4
gpt4 key购买 nike

所以我正在尝试为 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

有没有办法用颜色包装替代品?此外,是否有更好的正则表达式来处理个位数天数? (因为在每月的第一天到第九天,它会在日历上突出显示该数字的每个实例。)

编辑:我正在运行 OS X, Darwin 内核版本 15.2.0,因为显然 OS X 上的 cal 实现不支持 -h 选项。

最佳答案

尝试:

cal -h | sed "s/$(date +%d)/"$'\033\[94m&\033\[0m/g'

注意事项:

  1. 默认情况下,cal突出显示当前日期。我用了 -h选择关闭它,这样它就不会干扰您喜欢的颜色。 [更新:显然这适用于 GNU cal仅]

  2. 你是对的 $(date +%d)必须出现在双引号中。但是,命令的其余部分没有。上面,我使用了 bash 的 $'...'对于命令的其余部分,因为它支持转义序列。

  3. 不需要一秒$(date +%d) .我们可以用 & 调用匹配的文本.

  4. 如果您有 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'

    第一个替换命令查找被空格包围的日期。这适用于除行尾的日期之外的所有个位数日期。第二个查找以空格开头且后跟行尾 ($) 的日期。

关于bash - 查找并替换当前文本以用颜色包裹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37171561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com