正则表达式通过仅提取前5个字符来批量重命名for循环中的文件

时间:2016-10-17 16:26:27

标签: regex bash csv

我有很多.xlsx文件,看起来像XXX-A_2016(最终).xlsx,我正在尝试编写一个shell脚本(bash),它将每个文件批量转换为csv,但也将输出文件重命名为“ XXX-A.csv“,所以我想在我的for循环中需要一个正则表达式来提取输入字符串(filename)的前5个字符。我有xlsx2csv,我正在使用以下循环:

for i in *.xlsx;
do
    filename=$(basename "$i" .xlsx);
    outext=".csv" 
    xlsx2csv $i $filename$outext
done

在转换为csv之前,缺少一行会处理文件重命名。

1 个答案:

答案 0 :(得分:2)

您可以使用:

for i in *.xlsx; do
    xlsx2csv "$i" "${i%_*}".csv
done

"${i%_*}"会在变量_末尾$i之后删除任何内容,结果会给我们XXX-A