如何从文件名中删除年份和月份

时间:2016-11-25 08:04:59

标签: shell unix

如何从ABC_PQRS_XYZ_2016_09

等文件名中删除年份和月份

并取两个变量中的值,如:

ABC_PQRS_XYZ_2016_09

year=2016
Month = 09

3 个答案:

答案 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