使用正则表达式重命名文件名

时间:2011-06-14 11:02:35

标签: regex shell rename aix

我在文件夹

中有一组文件(ABC.AM.*.*.20*.*

例如:ABC.AM.00.13.201106.00014,我需要将其重命名为ABC.AM.00.13.201106.01014。我在AIX中,因此无法使用重命名命令。

只是一个伪脚本

for i in `ls ABC.AM.*.*.20*.*`
do
        mv $i DESIRED_file_name
done

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

试试这个:

for arg in ABC.AM.*.*.20*.*
do
  newarg="$(echo "$arg" | sed 's/\(.*\..\)0\(.*\)/\11\2/')"
  if [ "$newarg" != "" ];then
    mv "$arg" "$newarg" 
  fi
done

答案 1 :(得分:0)

目前尚不清楚您想要制作的替代品究竟是什么,但对于您提供的具体示例,您可以这样做:

for ...; do
    mv $i ${i/00014/01014}
done

这类事情的常用技巧是使用sed生成新文件名:

for old_name in ...; do
  new_name=$( echo $old_name | sed -e '...' )
  mv $old_name $new_name
done

当做这种事情时,最好用'echo'替换'mv'并确保你有你想要的替换,然后使用'mv'重新运行命令。

在您的情况下,您可能希望使用以下内容:

sed -e 's/000\([0-9]\{2\}\)$/010\1/'