修改“日期”格式为“第二” /“第三” /等。使用案例陈述和/或正则表达式

我正在尝试编写一个脚本,该脚本将以以下格式输出日期:Friday, May 2nd。这是分配的一部分,它要求使用每一个正则表达式,一条case语句,并将命令sed的输出修改date为所需的格式。

我从以下内容开始:

#!/bin/bash
date "+%A, %B %d"

...但是输出的形式为:

Friday, May 2

不是以下形式的必需形式:

Friday, May 2nd


HUWWW
浏览 251回答 2
2回答

弑天下

这是一个奇怪的要求。这是您case用来添加序数后缀的方法d=$(date '+%A, %B %e')case $d in     *1[0-9]) d+=th ;;     *1) d+=st ;;     *2) d+=nd ;;     *3) d+=rd ;;     *)  d+=th ;; esacecho "Welcome $(whoami) today is, $d"请注意,case它不使用正则表达式,而是使用外壳模式

缥缈止盈

使用sed应用一系列的替代(在正则表达式匹配条件)的可能看起来像:d=$(date '+%A, %B %e')d_sed=$(sed -Ee 's/(1[0-9])$/\1th/' \&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-e 's/1$/1st/' \&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-e 's/2$/2nd/' \&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-e 's/3$/3rd/' \&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-e 's/([[:digit:]])$/\1th/' <<<"$d")echo "Welcome $(whoami), today is $d_sed"在这种情况下,每个表达式(.*1[0-9])$都是regex。(使用该-E参数将启用“ POSIX扩展”正则表达式语法,该语法比“基本” POSIX regex语法BRE更加容易使用)。分解那些正则表达式中使用的语法:[0-9]定义一个字符类,该字符类在0和之间的任意位置匹配单个字符9。这个特定的类也可以写成[[:digit:]]预定义类之一。$表示“仅当行尾位于此位置3$时才匹配”,因此仅当a3是行中的最后一个字符时才匹配。(...)将括号的内容视为一个组。这意味着操作员喜欢*并将+该组当作一个单元对待,而且(出于我们的目的)还充当捕获操作员:\1在替换方面,它指的是第一个捕获组,因此,是在那些parens中找到的内容。
打开App,查看更多内容
随时随地看视频慕课网APP