Переименуйте имя файла с помощью регулярного выражения - PullRequest
0 голосов
/ 14 июня 2011

У меня есть набор файлов (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 ]

2 голосов
/ 14 июня 2011

Попробуйте это:

for arg in ABC.AM.*.*.20*.*
do
  newarg="$(echo "$arg" | sed 's/\(.*\..\)0\(.*\)/\11\2/')"
  if [ "$newarg" != "" ];then
    mv "$arg" "$newarg" 
  fi
done
0 голосов
/ 14 июня 2011

Не совсем точно, какую именно замену вы хотите сделать, но для конкретного примера, который вы приводите, вы можете сделать:

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

При выполнении такого рода действий рекомендуется заменить «mv» на «echo» и убедиться, что у вас есть нужная замена, а затем снова запустить команду, используя «mv».

В вашем случае вы, возможно, захотите использовать что-то вроде:

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