如何使用cal命令提取当前日期数字(禁止使用date +%d)
从cal输出提取当前日期数字的方法
可以利用cal命令输出中当前日期会被ANSI反显格式标记的特性,通过正则匹配提取目标数字:
cal | grep -oP '\x1b\[7m\K\d+'
命令解释:
cal:输出当前月份的日历grep -oP:-o只输出匹配的部分,-P启用Perl兼容正则表达式\x1b\[7m:匹配ANSI反显的起始转义序列(\x1b是ESC字符,[7m表示反显模式)\K:正则断言,忽略前面匹配的内容,只保留后面的数字\d+:匹配1个或多个数字,也就是当前日期的数字(比如2或02,取决于cal的输出格式)
如果你的cal版本输出的日期个位数前面没有补零(比如显示 2而不是02),可以用下面的命令补零,统一输出两位数字:
cal | grep -oP '\x1b\[7m\K\s?\d+' | sed 's/ //g' | awk '{printf "%02d\n", $0}'
补充说明:
这种方法完全依赖cal的输出特性,不同系统的cal可能略有差异,但大部分类Unix系统的cal都会用ANSI反显标记当前日期,所以这个方法通用性较强。
内容的提问来源于stack exchange,提问作者Lib
相关产品推荐
相关产品推荐

