Como recuperar o valor da expressão regular

0

Não tenho certeza se estou perguntando da maneira certa ou se é possível. Eu quero mudar o nome de alguns arquivos usando seu próprio nome.

Vamos supor que eu tenha arquivo1, arquivo2 e arquivo3. Eu quero fazer algo como:

mv file* file{recover_number}_xyz

Para obter: file1_xyz, file2_xyz e file3_xyz

    
por AFP_555 24.08.2017 / 05:15

1 resposta

1

Existem ferramentas que podem aplicar uma pesquisa e substituição de regex a todo o nome do arquivo, por exemplo, perl-rename (também chamado geralmente de prename ). Nessas ferramentas, você corresponderia vários dígitos com \d+ ou [0-9]+ dentro de um "grupo de captura" (parênteses) e faria referência a ele posteriormente com $1 ou dependendo do programa.

Por exemplo:

prename -v 's/file(\d+)$/file$1_xyz/' file[123]

prename -v 's/(file\d+)$/$1_xyz/' file[123]

(A opção -v faz o prename imprimir as alterações. Você pode usar -n para imprimir as alterações sem realmente renomear nada.)

Você também pode conseguir isso usando apenas mv e sed :

for old in file[123]; do
    new=$(sed -r 's/file([0-9]+)$/file_xyz/' <<< "$old")
    mv -v "$old" "$new"
done

Mas se você olhar de perto, você não precisa realmente do número. Tudo o que você está fazendo é anexar algum texto estático de qualquer maneira, assim:

prename 's/$/_xyz/' file[123]

for f in file[123]; do
    mv "$f" "${f}_xyz"
done
    
por 24.08.2017 / 07:31

Tags