替换特定出现的字符

替换特定出现的字符

我有一堆文件..这里有一些。还有数百个。

2019-02-08-07-32-00_UM8305_H.PDF  2019-03-17-17-59-59_UM8305_H.PDF  2019-05-05-23-59-59_UM8305_H.PDF  2019-07-08-12-31-57_UM8305_W.PDF  2019-08-20-00-01-52_UM8305_H.PDF  2019-11-07-08-26-51_UM8305_H.PDF
2019-02-08-10-07-45_UM8305_W.PDF  

我想将 的第 10 个索引替换"-""_".我更改了所有文件以替换'_'with '-',然后再次重命名它,因此'_'将是'_UM8305_W.PDF'and '_UM8305_H.PDF'。现在我无法在网上找到一种方法来替换'-'特定情况下的 。我想找到所有'-'并替换第 3、6 和 7 个位置(如果它们都是 )'-'。我只是使用重命名来替换它,但不能这样做,因为有数千个具有不同月份和日期的文件,并且替换不能有效地做到这一点。

答案1

该解决方案使用参数扩展。它假设文件名具有相同的长度并遵循某种模式,在本例中:YYYY-MM-DD-HH-MM-SS_rest_of_string.PDF

for f in *.PDF; do
  mv $f ${f:0:10}_${f:11}
done

${f:0:10} 

从字符串的开头到第十个字符。


从那里添加_并打印从十二个字符到末尾的内容:

_${f:11}

由于字符数是从 0 开始的,因此 11 表示第 12 个字符。

相关内容