sky*_*ook 8 regex unix textmate date
如何添加后缀的一天一个unix日数?
我会解释一下.我有一个TextMate包snippit,写出今天的日期.它使用unix日期和格式.这是代码:
`date +%A` `date +%d` `date +%B` `date +%Y`
Run Code Online (Sandbox Code Playgroud)
它输出:
2010年3月22日星期一
我想将后缀添加到当天(st,nd,rd和th),如下所示:
2010年3月22日星期一
据我所知,unix日期格式中没有本机函数,就像在PHP(j)中一样.我如何在unix中实现这一目标?一天复杂的正则表达式?
Tai*_*aul 11
尝试.
#!/bin/sh
DaySuffix() {
case `date +%d` in
1|21|31) echo "st";;
2|22) echo "nd";;
3|23) echo "rd";;
*) echo "th";;
esac
}
date "+%A %d`DaySuffix` %B %Y"
Run Code Online (Sandbox Code Playgroud)
我在 Linux 机器(Ubuntu 8.10)上有类似的工作。我认为它不适用于 Solaris,我测试的一台机器不允许在 % 后面使用 _ 字符以避免用 0 填充字段。非填充允许日期返回 1 而不是 01(01st 不与第一个相比看起来不正确)。
我使用名为 DaySuffix 的 shell 函数(同样,您的操作系统或 shell 版本可能不喜欢我定义函数的方式),然后将该函数作为日期调用的一部分进行调用。func 本身相当笨拙,我相信有更好的方法可以做到这一点,但它对我有用。请注意 11、12 和 13 的特殊情况-您必须喜欢英语!
#!/bin/sh
DaySuffix() {
if [ "x`date +%-d | cut -c2`x" = "xx" ]
then
DayNum=`date +%-d`
else
DayNum=`date +%-d | cut -c2`
fi
CheckSpecialCase=`date +%-d`
case $DayNum in
0 )
echo "th" ;;
1 )
if [ "$CheckSpecialCase" = "11" ]
then
echo "th"
else
echo "st"
fi ;;
2 )
if [ "$CheckSpecialCase" = "12" ]
then
echo "th"
else
echo "nd"
fi ;;
3 )
if [ "$CheckSpecialCase" = "13" ]
then
echo "th"
else
echo "rd"
fi ;;
[4-9] )
echo "th" ;;
* )
return 1 ;;
esac
}
# Using consolidated date command from chris_l
# Also using %-d instead of %d so it doesn't pad with 0's
date "+%A %-d`DaySuffix` %B %Y"
Run Code Online (Sandbox Code Playgroud)