亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

修改“日期”格式為“第二” /“第三” /等。使用案例陳述和/或正則表達式

修改“日期”格式為“第二” /“第三” /等。使用案例陳述和/或正則表達式

HUWWW 2021-04-04 16:13:13
我正在嘗試編寫一個腳本,該腳本將以以下格式輸出日期:Friday, May 2nd。這是分配的一部分,它要求使用每一個正則表達式,一條case語句,并將命令sed的輸出修改date為所需的格式。我從以下內容開始:#!/bin/bash date "+%A, %B %d"...但是輸出的形式為:Friday, May 2不是以下形式的必需形式:Friday, May 2nd
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

這是一個奇怪的要求。這是您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 ;; 

esac

echo "Welcome $(whoami) today is, $d"

請注意,case它不使用正則表達式,而是使用外殼模式


查看完整回答
反對 回復 2021-04-16
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

使用sed應用一系列的替代(在正則表達式匹配條件)的可能看起來像:


d=$(date '+%A, %B %e')


d_sed=$(sed -Ee 's/(1[0-9])$/\1th/' \

             -e 's/1$/1st/' \

             -e 's/2$/2nd/' \

             -e 's/3$/3rd/' \

             -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中找到的內容。


查看完整回答
反對 回復 2021-04-16
  • 2 回答
  • 0 關注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號