dividir la cadena en el script bash

dividir la cadena en el script bash

Estoy tomando algunos comentarios del usuario y verificando los detalles al respecto.

Ejemplo:

$HOME/Documents/test/one.txt

Tomo la cadena anterior como entrada y quiero recuperarla one.txt, necesito continuar con ella one.txt.

Respuesta1

@Jordanm ya te ha dado la respuesta canónica que funciona para cualquier cadena. Si se trata específicamente de rutas, también puede utilizar los programas basenamey dirname:

   basename - strip directory and suffix from filenames
   dirname - strip last component from file name

Por ejemplo:

$ file="$HOME/Documents/test/one.txt"
$ dir=$(dirname "$file");
$ name=$(basename "$file");
$ echo "The file called $name is in the directory $dir"
The file called one.txt is in the directory /home/terdon/Documents/test

Respuesta2

Esta es una tarea común que puede ser realizada por unexpansión de parámetrosen cualquier shell POSIX.

path=$HOME/Documents/test/one.txt
file=${path##*/} # file contains one.txt

Otro método común es utilizar el programa de nombre base.

file=$(basename "$path")

La única desventaja es tener que generar un programa externo. Su principal ventaja es que maneja adecuadamente las rutas con un final /.

Respuesta3

Si está haciendo esto con nombres de archivos, use el basenamecomando:

$ basename $HOME/Documents/test/one.txt
one.txt

Más:

$ FILE=$(basename basename $HOME/Documents/test/one.txt)
$ echo $FILE
one.txt

Si necesita dividir cadenas arbitrarias con delimitadores arbitrarios, es un poco de magia. Lea la cadena en una matriz y establezca el separador del campo de entrada en el delimitador.

He aquí un ejemplo:

$ IFS='/' read -a my_array <<< "$HOME/Documents/test/one.txt"
$ ARRAY_LENGTH=$(( ${#my_array[@]} - 1 ))
$ echo "${my_array[$ARRAY_LENGTH]}"
one.txt

información relacionada