如何从ABC_PQRS_XYZ_2016_09
并取两个变量中的值,如:
ABC_PQRS_XYZ_2016_09
year=2016
Month = 09
答案 0 :(得分:4)
在Bash中
echo date('M d,Y H:i:s', strtotime('2016-11-12 10:47:23'));
输出
filename='ABC_PQRS_XYZ_2016_09'
month="${filename: -2}"
year="${filename: -7:4}"
printf "year: %s\nmonth: %s\n" "$year" "$month"
便携版
year: 2016
month: 09
<强> P.S。强>
在对其他答案的评论中,您提到实际上您的文件名扩展名为year="${filename%*_*}"
year="${year##*_}"
month="${filename##*_}"
printf "year: %s\nmonth: %s\n" "$year" "$month"
。可以使用.txt
命令切断扩展名:
basename
答案 1 :(得分:2)
这可以使用合适的内部字段分隔符(IFS)和$ saved_IFS=$IFS
$ filename='ABC_PQRS_XYZ_2016_09.txt'
$ IFS=_.
$ set -- $filename
$ echo $1
ABC
$ echo $2
PQRS
$ echo $3
XYZ
$ echo $4
2016
$ echo $5
09
$ echo $6
txt
$ IFS=$saved_IFS
进行移植:
<div class="col-lg-4">
<input class="form-control" type="datetime" date-time auto-close="true" view="date"
min-view="date" maxlength="10" format="dd/MM/yyyy" ng-model="$ctrl.DateInput"
placeholder="renewal date" required="true">
</div>
请注意这是纯shell代码。没有bashisms和awk,cut,basename或其他没有昂贵的分叉。
答案 2 :(得分:1)
month=$(echo ABC_PQRS_XYZ_2016_09.txt |awk -F_ '{split($NF,a,".");print a[1]}')
year=$(echo ABC_PQRS_XYZ_2016_09.txt |awk -F_ '{print $(NF-1)}')
echo $month
09
echo $year
2016
OR
month=$(echo ABC_PQRS_XYZ_2016_09.txt |grep -oP '_\K..(?=\.)')
year=$(echo ABC_PQRS_XYZ_2016_09.txt |grep -oP '_\K\d{4}(?=_)')
echo $month
09
echo $year
2016