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

9

A página do manual fornece dois exemplos:

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

Então é s ou ye então /replaceThis/withThis

O que significam os líderes s e y? Existem outras opções?

dan gibson
fonte

Respostas:

12

No primeiro caso:

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

você está executando uma expressão regular nos 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á correspondendo no espaço do padrão de expressão regular e transliterando para o destino. Em outras palavras, o intervalo AZ é alterado para o intervalo az, tornando os nomes dos arquivos em minúsculas.

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


De man sed:

s / regexp / substituição /    
       Tente combinar regexp com o espaço do padrão. Se o sucesso
       Se necessário, substitua a parte correspondente à substituição. o
       a substituição pode conter o caractere especial e fazer referência a esse
       parte do espaço do padrão correspondente, e o espaço especial
       escapa \ 1 a \ 9 para se referir à correspondência correspondente
       sub-expressões no regexp.

y / fonte / dest /  
       Transliterar os caracteres no espaço padrão que aparecem
       na fonte para o caractere correspondente em dest.
John S Gruber
fonte
Muito obrigado - eu não sou apenas certo apontando as pessoas para 'sed' é a melhor idéia, dada a sua grande variedade de implementações, especialmente entre qualquer distro Linux e OSX
aaaaaa
@aaaaaa Este site é exclusivamente sobre o Ubuntu.
Wjandrea # 7/18