Una terminal dentro de una terminal. Un chiste que nunca se ha hecho antes.

El entorno de la terminal en GNU/Linux almacena las órdenes que escribimos, de forma que podemos utilizar las flechas para movernos por las entradas anteriores, modificarlas según nuestras necesidades y volverlas a ejecutar. Sin embargo, hay algunos atajos que nos lo ponen __todavía más fácil__.

Hoy hablaremos de __tres elementos__: los _designadores de eventos_, los _designadores de palabras_ y los _modificadores_. ¿Te suena todo a chino? No te preocupes, es normal. Poniendo un poco de atención y teniendo al lado una terminal con la que practicar enseguida dominarás todas estas técnicas que, si utilizas la terminal a menudo, seguro que te interesan.

El primer elemento que veremos son los __designadores de eventos__, un nombre un tanto barroco que en realidad se refiere a reemplazos por líneas del historial. Solo deberemos poner un símbolo «_!_» seguido del número de líneas que queremos retroceder en el historial, o seguido de la búsqueda que deseemos hacer.

__!-1__ o __!!__ es reemplazado por el contenido de la línea anterior.
__!-3__ es reemplazado por el contenido de hace tres líneas.
__!vlc__ es reemplazado por el contenido de la última línea que empezaba por _vlc_.
__!?vlc?__ es reemplazado por el contenido de la última que contenía _vlc_.
__!#__ es reemplazado por el contenido de la línea en la que estamos desde el principio hasta ese punto.

El segundo elemento de esta receta son los __designadores de palabras__, que se utilizan en conjunción con los anteriores para referirse a palabras dentro de las líneas seleccionadas con los _designadores de eventos_ que acabamos de ver. Se encadenan mediante un símbolo «_:_».

!!__:0-2__ se refiere al rango de palabras desde la primera a la tercera de la línea anterior.
!!__:3__ se refiere a la cuarta palabra, mientras que !!__:$__ a la última.

Por último, están los __modificadores__, que pueden utilizarse para modificar esas palabras o líneas, que es lo más interesante de todo este asunto, a mi parecer. Se utilizan como los _designadores de palabras_, encadenados con un símbolo «_:_» cada uno.

!!:$__:h__ quita el componente final de la última palabra de la línea anterior, suponiendo que es una ruta a un archivo.
!!:$__:t__ hace lo contrario, quita todos los componentes de la ruta salvo el último.
!!:$__:r__ y !!:$__:e__ hacen lo mismo que los dos anteriores, pero con extensiones de archivos.
* !!:$__:s/_viejo_/_nuevo_/__ o __^viejo^nuevo__ sustituye _viejo_ por _nuevo_.

Cuando utilices los _designadores de eventos_ verás la línea resultante ya con todos los reemplazos hechos después que pulses la tecla _intro_, así puedes ir viendo los resultados de tus acciones. De todas formas unos ejemplos nunca están de más, así que:

cat /etx/apt/sources.list
^etx^etc
cp !!:$ !!:$:t:h

En la primera línea lo que hago es intentar listar el contenido del archivo «_/etc/apt/sources.list_», pero me equivoco. En la segunda línea corrijo el primer comando, cambiando «_etx_» por «_etc_». Rizando un poco el rizo, en la tercera línea copio «_/etc/apt/sources.list_» en el archivo «_sources_» del directorio actual.

sudo cp /etc/apt/sources.list !#:$.bak

En este otro ejemplo, estoy haciendo una copia de seguridad de «_/etc/apt/sources.list_» en «_/etc/apt/sources.list.bak_» pero en lugar de volver a escribir el archivo por segunda vez, utilizo el _designador de evento_ que me devuelve toda la línea escrita hasta ese punto «_!#_», obtengo solo la última palabra «_:$_» y finalmente le añado el «_.bak_».

Vía: Richard WM Jones | Foto original: Hyougushi

Más guías y consejos