Como eu removo certos caracteres antes ou depois de um certo número de uma lista de arquivos no terminal?

0

Suponha que haja uma lista de arquivos com o seguinte padrão:

ABC2011DEFG.txt

Qual comando devo usar para remover caracteres antes ou depois do número entre, mantendo a extensão do arquivo?

Por favor, note que o número de caracteres redundantes não é fixo.

    
por Amin 22.12.2015 / 16:07

2 respostas

1

Usando 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)

Se os arquivos forem renomeados como esperado, remova a opção -n .

    
por kos 22.12.2015 / 16:33
1

Tente isto:

rename 's/[^0-9]*([0-9]*)[^0-9]*(\..*)/$1$2/' *
  • [^0-9]* significa qualquer coisa, menos dígitos, qualquer número de vezes
  • [0-9]* significa apenas dígitos, qualquer número de vezes
  • (\..*) significa ponto ( \. ), então qualquer coisa ( .* ) - a extensão
  • $1 é o conteúdo do que corresponde aos primeiros parênteses (os dígitos)
  • $2 é o conteúdo do que corresponde aos segundos parênteses (a extensão)

Então, se você tiver:

2012xyz.txt  ABC2011DEFG.txt  zyx2013.txt

você receberá:

2011.txt  2012.txt  2013.txt
    
por Cos64 22.12.2015 / 16:22