我使用sed
重新格式化輸入字符串,其中一部分我想用其他字符串替換。使用sed替換關聯bash數組中的匹配值
輸入字符串是在量的格式的日期:
%Y-%m-%dT%H:%M:%S.%N%:z
Example:
2016-01-20T08:15:32.398242-05:00
我的目標是在該示例中,以取代個月,01
以上,具有一個字符串表示如Jan
。
我定義以下數組來使用:
declare -A MONTHS=([01]="Jan" [02]="Feb" [03]="Mar" [04]="Apr" [05]="May" [06]="Jun" [07]="Jul" [08]="Aug" [09]="Sep" [10]="Oct" [11]="Nov" [12]="Dec")
我似乎無法得到sed
使用匹配的組的值作爲索引到MONTHS
陣列。
我已經試過什麼:
# straightforward sed approach
sed 's/^[0-9]\{4\}-\([0-9]\{2\}\)-.*/${MONTHS[\1]}/g'
# result: ${MONTHS[01]}
# break out of the single quotes
sed 's/^[0-9]\{4\}-\([0-9]\{2\}\)-.*/'"${MONTHS[\1]}"'/g'
# result:
# use double quotes
sed "s/^[0-9]\{4\}-\([0-9]\{2\}\)-.*/${MONTHS[\1]}/g"
# result:
# use double quotes *and* a hardcoded example
sed "s/^[0-9]\{4\}-\([0-9]\{2\}\)-.*/${MONTHS[\1]}, ${MONTHS[01]}/g"
# result: , Jan
是否有可能使用來自sed
匹配的組值作爲替換數組索引?
注:我故意避開date
功能,因爲這個應用程序可以超越實際的日期;但是,我絕對願意採用替代方法,如awk
。
哦,太棒了,這很好用!我非常喜歡它可以讓我內嵌替換值,而其他一切都很容易根據我的需要進行修改。謝謝=] – newfurniturey