GNU/Linux 日期命令序数后缀

GNU/Linux 日期命令序数后缀

PHP日期函数可以添加月份中日期的序数后缀,例如“st”、“nd”、“rd”等。是否可以使用dateLinux 中的命令实现相同的功能?

答案1

我认为常见的date实现无法自行完成此操作。您可以请求一些带有您选择的“通配符”的自定义格式,然后对其进行处理。示例:

LC_ALL=C date '+%B %eXX %Y' | sed -e 's/11XX/11th/' -e 's/12XX/12th/' -e 's/13XX/13th/' -e 's/1XX/1st/' -e 's/2XX/2nd/' -e 's/3XX/3rd/' -e 's/XX/th/'

我使用了LC_ALL=C该命令,因此无论语言环境如何都可以进行测试。


要查看此sed命令如何使用“通配符”处理各种日期,请运行以下命令:

sed -e 's/11XX/11th/' -e 's/12XX/12th/' -e 's/13XX/13th/' -e 's/1XX/1st/' -e 's/2XX/2nd/' -e 's/3XX/3rd/' -e 's/XX/th/' << EOF
October  1XX 2019
October  2XX 2019
October  3XX 2019
October  4XX 2019
October 10XX 2019
October 11XX 2019
October 12XX 2019
October 13XX 2019
October 14XX 2019
October 20XX 2019
October 21XX 2019
October 22XX 2019
October 23XX 2019
October 24XX 2019
October 30XX 2019
October 31XX 2019
EOF

记事本%e中单个数字前面带有空格字符。您可能想要也可能不想要这个。 的一些实现date可能允许您避免这种情况(date来自 GNU coreutils?使用%-d)。对我的示例的一个可移植修复是sed使用进行扩展-e 's/ / /'

答案2

我的解决方案是管道: sed -e 's/ of/th of/' -e 's/2th/2nd/' -e 's/\([^1]\)3th/\13rd/' -e 's/\([^1]\)1th/\11st/'

相关内容