Zmień nazwę - co oznacza „s //” vs. „y //”?

9

Strona man podaje dwa przykłady:

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

Więc to albo s albo y, a potem /replaceThis/withThis

Co oznaczają wiodące s i y? Czy są inne opcje?

Dan Gibson
źródło

Odpowiedzi:

12

W pierwszym przypadku:

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

uruchamiasz wyrażenie regularne przeciwko nazwom plików i zastępujesz pasującą część wyrażeń (.bak na końcu nazwy pliku) drugim wyrażeniem (które jest puste).

W drugim przypadku:

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

dopasowujesz do przestrzeni wzorców wyrażeń regularnych i transliterujesz do celu. Innymi słowy, zakres AZ zmienia się na zakres az, przez co nazwy plików są małe.

Proponuję zajrzeć na stronę podręcznika użytkownika sed, aby uzyskać więcej poleceń i więcej szczegółów. Myślę, że najczęściej używane jest polecenie „s”. Jak dobrze, regex (sekcja 7) i Perl dokumentacja może być pomocne. W szczególności, oto samouczek dotyczący perla i wyrażeń regularnych.


Od man sed:

s / regexp / replace /    
       Próba dopasowania wyrażenia regularnego do przestrzeni wzorca. Jeśli sukces
       W pełni wymień tę część dopasowaną do zamiennej. The
       zamiennik może zawierać znak specjalny i odnosić się do tego
       część pasującego obszaru wzoru i specjalne
       ucieka od \ 1 do \ 9, aby odnieść się do odpowiedniego dopasowania
       wyrażenia podrzędne w wyrażeniu regularnym.

y / source / dest /  
       Transliteruj znaki w wyświetlanym obszarze wzorców
       w źródle do odpowiedniej postaci w dest.
John S Gruber
źródło
Dzięki dużo - Po prostu nie jestem pewien, wskazując ludziom do „sed” jest najlepszym pomysłem, biorąc pod uwagę jego wiele wdrożeń, zwłaszcza między danym dystrybucji Linux i OSX
aaaaaa
@ aaaaaa Ta strona dotyczy wyłącznie Ubuntu.
wjandrea,