Regex 用正则表达式重命名文件名
我在一个文件夹中有一组文件(Regex 用正则表达式重命名文件名,regex,shell,rename,aix,Regex,Shell,Rename,Aix,我在一个文件夹中有一组文件(ABC.AM.*.20.*) e、 g.: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 非常感谢您提供的任何帮助我们不清楚您到底想更换什么,但对于您给出的特定示例,您可以: for ...; do
ABC.AM.*.20.*
)
e、 g.: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
非常感谢您提供的任何帮助我们不清楚您到底想更换什么,但对于您给出的特定示例,您可以: for ...; do mv $i ${i/00014/01014} done 对于做 mv$i${i/00014/01014} 完成 这类事情的一种常见技术是使用sed生成新文件名: for old_name in ...; do new_name=$( echo $old_name | sed -e '...' ) mv $old_name $new_name done 在…的旧名字。。。;做 new_name=$(echo$old_name | sed-e'…')) mv$旧名称$新名称 完成 在执行此类操作时,最好将“mv”替换为“echo”,并确保您拥有所需的替换,然后使用“mv”重新运行命令 在您的情况下,您可能希望使用以下内容: sed -e 's/000\([0-9]\{2\}\)$/010\1/' sed-e's/000\([0-9]\{2\}\)$/010\1/' 试试这个:
for arg in ABC.AM.*.*.20*.*
do
newarg="$(echo "$arg" | sed 's/\(.*\..\)0\(.*\)/\11\2/')"
if [ "$newarg" != "" ];then
mv "$arg" "$newarg"
fi
done
我很确定rename是开源的,并且可能在AIX上构建得很好。@William Pursell好吧,我不应该这么做。有什么解决办法吗?你说的“不应该这么做”是什么意思?您的意思是不能在/usr/bin中安装它吗?如果您在主目录中有写权限,您可以始终尝试--prefix=$home并在那里安装。(但我不想麻烦了:rename提供的功能很容易通过简单的shell脚本获得。)感谢您的回复。。我只想在第二个位置用1替换零,例如00014/01014 00015/01015 00004/01004为什么要放弃错误?如果文件未被移动,用户肯定会希望看到错误消息。谢谢@John.。这真的很有帮助:)