我正在将一些xls文件转换为CSV,需要从文件名中提取一些内容,看起来像~/foo2008-2012tmpl.xls
。使用2008
调用时,我需要脚本中的foo2008-2012tmpl.csv
和foo
。我目前的版本是:
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进行多个字符串替换以从文件名中获取year
?我尝试了extglob,但是当我添加一个从未匹配的|
时:/
同样,从/home/chx/...xls
开始一次性移除$file
部分的任何方式?
答案 0 :(得分:0)
可能是:
year=$(expr "$file" : ".*$1\(....\)")