Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用正则表达式重命名文件名_Regex_Shell_Rename_Aix - Fatal编程技术网

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.。这真的很有帮助:)