Umbenennen - was bedeutet "s //" gegen "y //"?

9

Die Manpage enthält zwei Beispiele:

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

Also ist es entweder s oder y und dann /replaceThis/withThis

Was bedeutet das führende s und y? Gibt es noch andere Möglichkeiten?

Dan Gibson
quelle

Antworten:

12

Im ersten Fall:

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

Sie führen einen regulären Ausdruck für Dateinamen aus und ersetzen den übereinstimmenden Teil der Ausdrücke (.bak am Ende eines Dateinamens) durch den zweiten Ausdruck (der leer ist).

Im zweiten Fall:

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

Sie stimmen mit dem Musterbereich für reguläre Ausdrücke überein und transliterieren zum Ziel. Mit anderen Worten, der Bereich AZ wird in den Bereich az geändert, wodurch die Dateinamen in Kleinbuchstaben geschrieben werden.

Ich schlage vor, Sie sehen sich die Manpage für sed an, um weitere Befehle und Details zu erhalten. Ich glaube, der Befehl 's' wird am häufigsten verwendet. Auch Regex (Abschnitt 7) und Perl-Dokumentation können hilfreich sein. Hier ist insbesondere ein Tutorial zu Perl und regulären Ausdrücken.


Von man sed:

s / regexp / replace /    
       Versuchen Sie, Regexp mit dem Musterbereich abzugleichen. Wenn Erfolg
       Ersetzen Sie den mit dem Ersatz übereinstimmenden Teil. Das
       Ersatz kann das Sonderzeichen & enthalten, um darauf hinzuweisen
       Teil des Musterraums, der übereinstimmte, und das Besondere
       Escapezeichen \ 1 bis \ 9, um auf die entsprechende Übereinstimmung zu verweisen
       Unterausdrücke im regulären Ausdruck.

y / source / dest /  
       Transliterieren Sie die Zeichen im angezeigten Musterbereich
       in source auf das entsprechende Zeichen in dest.
John S. Gruber
quelle
Vielen Dank - ich bin mir nur nicht sicher, ob es die beste Idee ist, Leute auf "sed" zu verweisen, da es eine Vielzahl von Implementierungen gibt, insbesondere zwischen einer bestimmten Linux-Distribution und OSX
aaaaaa
@aaaaaa Diese Seite handelt ausschließlich von Ubuntu.
Wjandrea