Shell 如何从文件名中删除年和月
如何从文件名中删除年和月,如Shell 如何从文件名中删除年和月,shell,unix,Shell,Unix,如何从文件名中删除年和月,如ABC\u PQRS\u XYZ\u 2016\u 09 取两个变量的值,如: ABC_PQRS_XYZ_2016_09 year=2016 Month = 09 或 在Bash中 filename='ABC_PQRS_XYZ_2016_09' month="${filename: -2}" year="${filename: -7:4}" printf "year: %s\nmonth: %s\n" "$year" "$month" 输出 便携式版本 yea
ABC\u PQRS\u XYZ\u 2016\u 09
取两个变量的值,如:
ABC_PQRS_XYZ_2016_09
year=2016
Month = 09
或
在Bash中
filename='ABC_PQRS_XYZ_2016_09'
month="${filename: -2}"
year="${filename: -7:4}"
printf "year: %s\nmonth: %s\n" "$year" "$month"
输出
便携式版本
year="${filename%*_*}"
year="${year##*_}"
month="${filename##*_}"
printf "year: %s\nmonth: %s\n" "$year" "$month"
p.S.
在对另一个答案的评论中,您提到您实际上有一个扩展名为.txt
的文件名。可以使用basename
命令切断扩展:
filename=$(basename "$filename")
这可以通过合适的内部字段分隔符(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
请注意,这是纯shell代码。没有bashisms,也没有昂贵的分叉到awk、cut、basename或其他。谢谢你的回复,但我的文件有扩展名。txtmount=$(echo ABC_PQRS_XYZ_2016_09.txt | awk-F{print$(NF)}),它给出了09.txt
year="${filename%*_*}"
year="${year##*_}"
month="${filename##*_}"
printf "year: %s\nmonth: %s\n" "$year" "$month"
filename=$(basename "$filename")
$ 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