TL; DR
rename -n 's/^((\w+\.+){3})(.).*\.(.*)\.(.).*\.(.*)\.\-(\..*)$/$1$3$4$5$6$7/' *
-
\w+
corresponde a um ou mais caracteres de palavras, ou seja,[a-zA-Z0-9_]+
[1] -
\.+
corresponde a um ou mais caracteres de ponto (.
) [2]Observe que
\.
corresponde ao caractere.
. Precisamos usar\.
para representar.
, pois.
tem um significado especial em regex. O\
é conhecido como o código de escape, que restaura o significado literal original do caractere seguinte. -
(\w+\.+){3}
corresponde ao máximo de 3 vezes de qualquer precisão acima de [1], [2] grupo de caracteres começando do início (^
corresponde ao início dos nomes) do nome dos arquivos.
Isso corresponderá ou retornarámy.program.name.
Observe que parênteses extras em torno da regex são usados para agrupamento de correspondência. A correspondência de agrupamento começa com
(
e termina com)
e é usada para fornecer as chamadas referências . Uma referência anterior contém a subcadeia correspondente armazenada em variáveis especiais $ 1 , $ 2 , … , $ 9 , onde $ 1 contém a substring correspondente ao primeiro par de parênteses e assim por diante. -
.
O ponto do metacaractere (.) corresponde a qualquer caractere único. Por exemplo,...
corresponde a quaisquer 3 caracteres. então, com esse(.)
, estamos igualando o primeiro caractere deseason
, que és
. -
.*\.
corresponde a tudo depois de um único caractere acima até primeiro.
, se visto. Como você pode ver, não o capturamos como um grupo de correspondências porque queremos removê-lo do nosso nome, onde isso corresponde aeason.
. -
(.*)
corresponde a tudo após a correspondência acima. Isso corresponde aNN
. Parênteses usados aqui porque queremos manter isso no nome do arquivo. -
\.
corresponde a um único ponto após a correspondência acima. Um.
após o primeiroNN
. -
(.)
novamente com esse estamos igualando o primeiro caractere após a correspondência acima. isso retornará apenase
. -
.*\.
corresponderá a tudo após a correspondência acima até o primeiro.
. Corresponderá apisode.
. -
(.*)
corresponde a qualquer coisa após o último ponto correspondente da correspondência acima. Isso corresponderá ao segundoNN
. -
\.\-
corresponde a um ponto.
seguido por um traço-
. Corresponderá ou retornará.-
-
E finalmente
(\..*)$
corresponde a um único ponto.
e tudo depois disso, que termina no final do nome do arquivo.$
corresponde ao final do nome do arquivo ou string de entrada.
Observação: remova a opção -n
para realizar renomeação real.