bash homedir/多个替换?

bash homedir/多个替换?,bash,csv,glob,Bash,Csv,Glob,我正在将一些xls文件转换为CSV文件,需要从文件名中提取一些内容,如~/foo2008-2012tmpl.xls。使用foo调用时,我需要脚本中的2008和foo2008-2012tmpl.csv。我目前的版本是: file=(~/$1*tmpl*xls) year=${file/*$1/} year=${year/-20??tmpl.xls/} loffice "-env:UserInstallation=file:///tmp/LibO_Conversion" --headless --

我正在将一些xls文件转换为CSV文件,需要从文件名中提取一些内容,如
~/foo2008-2012tmpl.xls
。使用
foo
调用时,我需要脚本中的
2008
foo2008-2012tmpl.csv
。我目前的版本是:

file=(~/$1*tmpl*xls)
year=${file/*$1/}
year=${year/-20??tmpl.xls/}
loffice  "-env:UserInstallation=file:///tmp/LibO_Conversion" --headless --convert-to csv $file --outdir .
localfile=$(basename $file)
csvfile=${localfile/xls/csv}
这很管用,但不太好看。是否可以使用bash一次性或以其他方式进行多个字符串替换,以从文件名中提取
年份
?我尝试了extglob,但在添加
|
时,它始终不匹配:/

类似地,从
$file

一次删除
/home/chx/…xls
部分的任何方法都可以是:

 year=$(expr "$file" : ".*$1\(....\)")

这实际上相当有效。您可以对
awk
、Perl、Python或其他任何东西执行相同的操作,但这需要运行外部程序。如果你问我的话,就这么好了。:)