bash homedir/多个替换?
我正在将一些xls文件转换为CSV文件,需要从文件名中提取一些内容,如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 --
~/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或其他任何东西执行相同的操作,但这需要运行外部程序。如果你问我的话,就这么好了。:)