2012-05-27 18 views
10

ejemplo de la secuencia:¿Cómo dividir la cadena en barra inclinada en bash

/gasg/cadena

resultado esperado: string

personajes para quitar: todos los caracteres entre los símbolos "/" incluido el símbolos

+0

'entre los símbolos"/"¿Qué debería suceder si solo hay una barra oblicua o ninguna barra oblicua? O texto antes de la primera barra? –

Respuesta

13

Con sed:

$ echo "/gasg/string" | sed -e 's/\/.*\///g' 
string 

Con la manipulación de cadenas Buil-en bash:

$ s="/gag/string" 
$ echo "${s##/*/}" 
string 

Sus cadenas se ven exactamente como los nombres de ruta Unix. Es por eso que también se puede utilizar la utilidad basename - que returnes la última porción del Unix ruta determinada:

$ basename "/gag/string" 
string 
# It works with relative paths and spaces too: 
$ basename "gag/fas das/string bla bla" 
string bla bla 
+0

La primera barra en la expansión de parámetros no es necesaria. Las citas de la tarea son necesarias en este caso, pero debe usarlas para la expansión por hábito. –

+0

Acepto que el primer '/' no es necesario, pero lo he agregado para ilustrar el punto. –

+0

Sus cadenas se parecen exactamente a las rutas de acceso de Unix. - Sí, fue mi intención obtener la última partición del nombre de ruta dado y con el nombre de base es como "find -exec basename {} \;" que es genial para mí. Gracias por el consejo. – user1306777

10

también AWK - uso barra como separador y de impresión último campo

echo "/gas/string" | awk -F/ '{print $NF}' 

O corte - pero que sólo funcionará si tiene igual número de directorios para despojar

echo "/gasg/string" |cut -d/ -f 3 
2

puede utilizar la manipulación de cadenas fiesta

a='/gasg/string' 
echo ${a##*/} 
Cuestiones relacionadas