Ganti nama - apa arti "s //" vs "y //"?

9

The man page memberikan dua contoh:

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

Jadi itu s atau y dan kemudian /replaceThis/withThis

Apa arti dari pemimpin dan y? Apakah ada opsi lain?

dan Gibson
sumber

Jawaban:

12

Dalam kasus pertama:

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

Anda menjalankan ekspresi reguler terhadap nama file dan mengganti bagian yang cocok dari ekspresi (.bak di akhir nama file) dengan ekspresi kedua (yang kosong).

Dalam kasus kedua:

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

Anda cocok dengan ruang pola ekspresi reguler dan transliterasi ke target. Dengan kata lain, rentang AZ diubah ke kisaran az, membuat nama file lebih kecil.

Saya sarankan Anda melihat halaman manual untuk sed untuk lebih banyak perintah dan lebih detail. Saya percaya perintah 's' paling sering digunakan. Selain itu, regex (bagian 7) dan dokumentasi perl juga dapat membantu. Secara khusus, inilah tutorial tentang perl dan ekspresi reguler.


Dari man sed:

s / regexp / penggantian /    
       Mencoba untuk mencocokkan regexp terhadap ruang pola. Jika berhasil
       ful, ganti bagian yang cocok dengan penggantian. Itu
       penggantian mungkin mengandung karakter khusus & untuk merujuk itu
       porsi ruang pola yang cocok, dan khusus
       lolos \ 1 hingga \ 9 untuk merujuk pada pencocokan yang sesuai
       sub-ekspresi dalam regexp.

y / sumber / dest /  
       Transliterasi karakter dalam ruang pola yang muncul
       dalam sumber ke karakter yang sesuai di dest.
John S Gruber
sumber
Terima kasih banyak - saya hanya tidak yakin menunjuk orang ke 'sed' adalah ide terbaik yang diberikan banyak implementasinya, terutama antara setiap distro linux dan OSX yang diberikan
aaaaaa
@aaaaaa Situs ini khusus tentang Ubuntu.
wjandrea