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