将两位数年份转换为四位数
Posted
技术标签:
【中文标题】将两位数年份转换为四位数【英文标题】:Convert two digit year to four digits 【发布时间】:2019-07-07 15:21:46 【问题描述】:在 bash 中字
我的文件格式为:test96abcd.TXT 我正在提取两位数的年份:
echo "test96abcd.TXT" | cut -c4-5
我希望做这样的事情:
echo "test96abcd.TXT" | cut -c4-5 | date +%Y
但它不起作用,更不用说我会遇到...Y2K 问题(当它是 00 时,不知道是 1900 年还是 2000 年)虽然我可以使用“手动处理这个异常”如果 00 使用 2000”。
但是有没有更优雅的方法来使用“日期”命令来处理这个问题?
【问题讨论】:
没关系00
s - 你怎么知道日期XX
应该永远是20XX
还是19XX
或其他什么?如果您只想将每个XX
更改为20XX
,那么您不需要date
。您的文件是否总是有 2 位数字且仅在 1 个位置只有 2 位数字,或者您能否获得 foo76bar83etc.txt
或 foo1234bar.txt
之类的文件,如果是,应如何处理?
我知道我的日期是从 1980 年到今天(不会超过 2030 年),并且它们的名称始终如我所述。我可以做一个很长的案例陈述,但寻找一种更优雅的方式......
【参考方案1】:
$ cat ../tst.sh
#!/bin/env bash
for old; do
[[ $old =~ ^([^0-9]*)(([0-9]*).*) ]] || continue
year=$BASH_REMATCH[3]
if (( year > 80 )); then
cent='19'
else
cent='20'
fi
new="$BASH_REMATCH[1]$cent$BASH_REMATCH[2]"
mv -- "$old" "$new"
done
$ ls
test00abcd.txt test17abcd.txt test96abcd.txt
$ ../tst.sh *
$ ls
test1996abcd.txt test2000abcd.txt test2017abcd.txt
【讨论】:
以上是关于将两位数年份转换为四位数的主要内容,如果未能解决你的问题,请参考以下文章