Operaciones con la ruta de fichero en Bash

A veces necesitamos obtener o sustituir partes de una ruta de fichero para automatizar procesos con un script.

A continuación mostraremos cómo obtener el nombre del fichero, su extensión y el subdirectorio en el que se encuentra a partir de una ruta, y cómo sustituir subcadenas en cadenas de caracteres. Por último, daremos una breve explicación de los caracteres especiales que se utilizan para manipular cadenas de caracteres en Bash.

Para los ejemplos utilizaremos la siguiente ruta:

path=/path/to/file.ext

La variable path contiene dicha ruta. Puede ver su contenido así:

echo -e $path

Obtener el nombre de fichero

file=${path##*/}

La variable file contiene el nombre de fichero:

echo -e $file

Obtener la extensión de fichero

ext=${path##*.}

La variable ext contiene la extensión de fichero:

echo -e $ext

Obtener el directorio donde se halla el fichero

dir=${path%/*}
subdir=${dir##*/}

La variable dir contiene la ruta completa de directorios hasta el fichero:

echo -e $dir

La variable subdir contiene el nombre del subdirectorio donde se halla el fichero:

echo -e $subdir

Sustituciones en cadenas de caracteres

Para explicar las sustituciones utilizaremos este ejemplo:

data="chr1,100,200,0.5"

El patrón que vamos a buscar es una coma (,) y lo reemplazaremos por un tabulador (\t, que escribiremos como \\t en la expressión por tratarse de un carácter escapado).

Para sustituir solo la primera coincidencia con el patrón:

data=${data/,/\\t}

Vemos que solo la primera coma se ha reemplazado por un tabulador:

echo -e $data

Para sustituir todas las coincidencias:

data=${data//,/\\t}

Ahora todas las comas han sido sustituidas por tabuladores:

echo -e $data

Explicación

Carácter especial Significado

#

Elimina la coincidencia con el patrón más corta empezando por la izquierda. El patrón va justo después de este carácter.

##

Elimina la coincidencia con el patrón más larga empezando por la izquierda. El patrón va justo después de este carácter.

%

Elimina la coincidencia con el patrón más corta empezando por la derecha. El patrón va justo después de este carácter.

%%

Elimina la coincidencia con el patrón más larga empezando por la derecha. El patrón va justo después de este carácter.

/

Reemplaza la primera coincidencia con el patrón empezando por la izquierda. El patrón va justo después de este carácter, a continuación va una barra / y por último el valor por el cual se reemplazará el patrón.

//

Reemplaza todas las coincidencias con el patrón. El patrón va justo después de este carácter, a continuación va una barra / y por último el valor por el cual se reemplazará el patrón.