我有字符串说,
a =“abc_def ghi__333_31122013_Monthly.pdf”
我需要每月子句和31122013来自shell脚本中的上述字符串。基本上从最后一个子串到第一个'_'的索引。
欢迎任何帮助或建议。
纳瓦迪普
答案 0 :(得分:2)
使用awk:
a="abc_def ghi__333_31122013_Monthly.pdf"
awk -F '[_.]' '{print $(NF-2), $(NF-1)}' <<< "$a"
31122013 Monthly
在BASH中使用IFS:
IFS=[_.] && arr=($a)
l=${#arr[@]}
echo ${arr[$l-3]}
31122013
echo ${arr[$l-2]}
Monthly
答案 1 :(得分:2)
如果您要移除_31122013_Monthly
,其中31122013
是可变的,您可以使用这样的替换:
$ a="abc_def ghi__333_31122013_Monthly.pdf"
$ echo ${a/_????????_Monthly}
abc_def ghi__333.pdf
如果另一方面你真的想要这个:
基本上从最后一个字符串到'_'的第一个索引。
然后,你可以这样做:
$ echo ${a/_*_}
abcMonthly.pdf
或者如果你想在_
之前切断31122013_Monthly.pdf
,那么你可以:
$ echo ${a#*__*_}
31122013_Monthly.pdf
答案 2 :(得分:0)
如果你真的想要删除下划线和下面的字母标记之间的最后八位数序列,直到完全停止之前,请尝试类似
的内容ext=${a##*.}
echo ${a%_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_*}.$ext
(这不完全准确;它会用8个数字替换带有下划线的尾部,然后重新加上延伸部分。)