Как удалить определенные символы до или после определенного числа из списка файлов в терминале?

Предположим, есть список файлов со следующим шаблоном:

ABC2011DEFG.txt

Какую команду следует использовать для удаления символов до или после промежуточного числа при сохранении расширения файла?

Обратите внимание, что количество избыточных символов не является фиксированным.

2 ответа

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

rename 's/[^0-9]*([0-9]*)[^0-9]*(\..*)/$1$2/' *
  • [^0-9]* означает что угодно, кроме цифр, любое количество раз
  • [0-9]* означает только цифры, любое количество раз
  • (\..*) означает точку (\.), тогда что угодно (.*) - расширение
  • $1 содержание того, что соответствует первым круглым скобкам (цифрам)
  • $2 содержание того, что соответствует вторым скобкам (расширение)

Так что если у вас есть:

2012xyz.txt  ABC2011DEFG.txt  zyx2013.txt

ты получишь:

2011.txt  2012.txt  2013.txt

С помощью rename:

rename -n 's/[^0-9]*//' *.txt # removes the first sequence of non-digits
rename -n 's/[^0-9]*\./\./' *.txt # removes the first sequence of non-digits followed by a dot
% rename -n 's/[^0-9]*//' *.txt
rename(ABC2011DEFG.txt, 2011DEFG.txt)
rename(HIJ2012KLMN.txt, 2012KLMN.txt)
rename(OPQ2013RSTU.txt, 2013RSTU.txt)
% rename -n 's/[^0-9]*\./\./' *.txt
rename(ABC2011DEFG.txt, ABC2011.txt)
rename(HIJ2012KLMN.txt, HIJ2012.txt)
rename(OPQ2013RSTU.txt, OPQ2013.txt)

Если файлы будут переименованы, как ожидается, удалите -n вариант.

Другие вопросы по тегам