Cambiar nombre: ¿qué significa "s //" frente a "y //"?

9

La página del manual da dos ejemplos:

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

Entonces es s o y y luego /replaceThis/withThis

¿Qué significan los principales sy e? ¿Hay otras opciones?

dan gibson
fuente

Respuestas:

12

En el primer caso:

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

está ejecutando una expresión regular contra nombres de archivo y reemplazando la parte coincidente de las expresiones (.bak al final del nombre de un archivo) con la segunda expresión (que está vacía).

En el segundo caso:

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

está haciendo coincidir el espacio del patrón de expresión regular y transliterando al objetivo. En otras palabras, el rango AZ se cambia al rango az, lo que hace que los nombres de archivo sean minúsculas.

Le sugiero que mire la página de manual de sed para obtener más comandos y más detalles. Creo que el comando 's' se usa con mayor frecuencia. Además, la expresión regular (sección 7) y la documentación de Perl también pueden ser de ayuda. En particular, aquí hay un tutorial sobre perl y expresiones regulares.


De man sed:

s / regexp / reemplazo /    
       Intenta hacer coincidir la expresión regular contra el espacio del patrón. Si el éxito
       Ful, reemplace esa porción combinada con reemplazo. los
       el reemplazo puede contener el carácter especial y para referirse a eso
       porción del espacio del patrón que coincidía, y el especial
       escapa \ 1 a \ 9 para referirse a la correspondencia correspondiente
       subexpresiones en la expresión regular.

y / source / dest /  
       Transliterar los caracteres en el espacio del patrón que aparecen
       en origen al caracter correspondiente en dest.
John S Gruber
fuente
Gracias mucho - Yo no estoy seguro que apuntan a gente 'sed' es la mejor idea dadas sus múltiples implementaciones, especialmente entre cualquier distribución de Linux y OSX dada
aaaaaa
@aaaaaa Este sitio es exclusivamente sobre Ubuntu.
wjandrea