【问题标题】:ISO-Format JJJJMMTT Alias/Script LinuxISO 格式 JJJJMMTT 别名/脚本 Linux
【发布时间】:2021-12-01 19:06:05
【问题描述】:

大家好,

我想将 dat2iso 命令实现为脚本或别名,它接受德语格式 DD.MM.YYYY 作为参数并以 ISO 格式 YYYYMMDD 输出日期作为输出(在标准输出上)。 示例(作为别名或作为系统路径中的脚本;

outputs: 
$ dat2iso 30.09.2021
20210930
$ dat2iso 01.01.2022
20220101
$ dat2iso 03/10/2021
Error!   <-- Because the separator was. required.
$ dat2iso 03.10.21
Error!   <-- Because the year YYYY was prescribed with four digits.
$ dat2iso 32.09.2021
Error!   <-- Denn einen 32. gibt es nicht.
$ dat2iso 30.13.2021
Error!   <-- Because there is no 13th month.

到目前为止,我已经改变了甲酸盐,但我不知道其余的,但我仍在努力:

echo 30.09.2021 | awk -F '.' {'printf "%s%s%s\n",$3,$2,$1'}

【问题讨论】:

    标签: linux bash awk sed


    【解决方案1】:

    一个非常冗长的解决方案,但它会检查您给定的豁免:

    cat << EOF > dat2iso
    #!/bin/bash
    
    if [[ "\$1" == "" ]];then echo -e "NO INPUT. Exiting."; exit 1 ;fi
    
    echo \$1 | awk -F '.' '/\//{ print "Input Error."; exit(1) }
       \$1>31{ print "Too many days."; exit(1) }
       \$2>12{ print "Too many months."; exit(1) }
       \$3!~/[[:digit:]][[:digit:]][[:digit:]][[:digit:]]/{ print "Not enough year digits."; exit(1) }
       { print \$3\$2\$1 }'
    EOF
    
    chmod +x dat2iso
    
    $ ./dat2iso 09.12.2021
    20211209
    

    【讨论】:

    • [[ "\$1" == "" ]] 究竟是做什么的?
    • 检查无输入。你可以用一个空白的'./dat2iso'来测试它
    【解决方案2】:

    这应该达到你的预期:

    #!/bin/bash
    
    dat2iso(){
        if  [[ $1 =~ ^([[:digit:]]{2})\.([[:digit:]]{2})\.([[:digit:]]{4})$ ]]; then
            local date="${BASH_REMATCH[3]}${BASH_REMATCH[2]}${BASH_REMATCH[1]}"
            if  date -d "$date" >& /dev/null; then
                echo "$date"
            else
                echo "Invalid date value [$date]" >&2
            fi
        else
            echo "Invalid format of input [$1]. Correct format [DD.MM.YYYY]" >&2
        fi
    }
    
    dat2iso 30.09.2021
    

    【讨论】:

    • 谢谢菲利普,但是当我删除脚本中的日期并输入随机日期时,它总是输入格式无效:(
    • 你能举个例子吗?
    • 我的意思是,现在我们在脚本中有一个日期,但我只想使用脚本进行手动输入。例如:dat2sio 03.12.2032
    • dat2iso 03.12.2032 给出20321203。这不是你所期望的吗?
    • 是的,但是我保存了脚本,当我运行它时,它给了我这个错误
    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 2019-06-03
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2021-09-05
    • 2019-03-23
    相关资源
    最近更新 更多