Renomear - o que significa s // vs y // significa?

5

A página man (http://manpages.ubuntu.com/manpages/dapper/man1/prename.1.html) fornece dois exemplos:

rename ’s/\.bak$//’ *.bak
rename ’y/A-Z/a-z/’ *

Então é s ou y e, em seguida, / replaceThis / withThis

O que significa o líder s e y? Existem outras opções?

    
por dan gibson 22.10.2012 / 23:21

1 resposta

7

No primeiro caso:

rename ’s/\.bak$//’ *.bak

você está executando uma expressão regular novamente com nomes de arquivos e substituindo a parte correspondente das expressões (.bak no final de um nome de arquivo) pela segunda expressão (que está vazia).

No segundo caso:

rename ’y/A-Z/a-z/’ *

você está combinando com o espaço padrão de expressão regular e transliterando para o destino. Em outras palavras, 'A-Z' é alterado para 'a-z', tornando os nomes dos arquivos minúsculos.

Eu sugiro que você veja a página man do sed para mais comandos e mais detalhes. Acrescentarei que acredito que o comando 's' é usado com mais frequência. A documentação do regex (seção 7) e do perl também pode ser útil. Em particular, aqui está um tutorial sobre perl e expressões regulares.

s/regexp/replacement/
Attempt to match regexp against the pattern space. If success‐ ful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes through to refer to the corresponding matching sub-expressions in the regexp.

y/source/dest/
Transliterate the characters in the pattern space which appear in source to the corresponding character in dest.

    
por John S Gruber 22.10.2012 / 23:50

Tags