Как удалить определенные символы до или после определенного числа из списка файлов в терминале?
Предположим, есть список файлов со следующим шаблоном:
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 вариант.