Renommer - que signifie «s //» vs «y //»?

9

La page de manuel donne deux exemples:

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

Donc c'est soit s ou y puis /replaceThis/withThis

Que signifient les s et y principaux? Y a-t-il d'autres options?

dan gibson
la source

Réponses:

12

Dans le premier cas:

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

vous exécutez une expression régulière sur les noms de fichiers et remplacez la partie correspondante des expressions (.bak à la fin d'un nom de fichier) par la deuxième expression (qui est vide).

Dans le second cas:

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

vous vous comparez à l'espace de modèle d'expression régulière et translittérez vers la cible. En d'autres termes, la plage AZ est remplacée par la plage az, ce qui rend les noms de fichiers en minuscules.

Je vous suggère de consulter la page de manuel de sed pour plus de commandes et plus de détails. Je crois que la commande 's' est utilisée le plus souvent. De plus, la documentation regex (section 7) et perl peut également être utile. En particulier, voici un tutoriel sur perl et les expressions régulières.


De man sed:

s / regexp / remplacement /    
       Essayez de faire correspondre l'expression rationnelle avec l'espace de modèle. En cas de succès‐
       ful, remplacez cette partie assortie au remplacement. le
       le remplacement peut contenir le caractère spécial et se référer à ce
       partie de l'espace de motif qui correspond, et la spéciale
       échappe \ 1 à \ 9 pour faire référence à la correspondance correspondante
       sous-expressions dans l'expression rationnelle.

y / source / dest /  
       Translittérer les caractères dans l'espace de motif qui apparaissent
       en source au caractère correspondant dans dest.
John S Gruber
la source
Merci beaucoup - je ne suis pas sûr de pointer les gens vers 'sed' est la meilleure idée étant donné sa multitude d'implémentations, en particulier entre une distribution linux donnée et OSX
aaaaaa
@aaaaaa Ce site est exclusivement consacré à Ubuntu.
wjandrea