linux:bash:historyexpansion

history expansion

shortcut descripción
eventos
! Indica que empieza la sustitución
!! Último comando → !-1
!n enésimo comando
!-n último comando menos n
!string el comando más reciente que empiece por string
!?string? el comando más reciente que contenga string
^string1^string2^ repite el último comando cambiando el primer string1 por string2
!!:gs/string1/string2 repite el último comando cambiando TODAS las string1 por string2
!# último comando
palabras - siguen a un evento, separado por :
0 la primera palabra de la linea, usualmente un comando
n la enésima palabra de una linea
^ el primer argument - la segunda palabra
$ el último argumento de una linea
% la palabra que cuadra con la búsqueda ?string? más reciente
* todos los argumentos
x* equivalente a x-$
x- ?
ejemplos de palabras:
!:^ primer argumento del último comando
!:$ último argumento del último comando
!:<n> argumento <n> del último comando
!:* todos los argumentos
modificaciones - siguen a una palabra, separados por :
h quita el path del final
t quita el path del principio
r quita la extensión de un archivo del estilo .xxx, dejando el nombre del archivo
e lo quita todo excepto la extensión
p imprime el comando resultantte sin ejecutarlo
q entrecomilla las palabras cambiadas, escapandolas
x entrecomilla las palabras por separado
s/old/new/[g] cambia OLD por NEW [g] hace que se aplique en toda la línea, no solo en el primero
& repite la anterior sustitución ?

Ejemplos:

$ echo a b c d e
a b c d e
$ echo !!:3-$
c d e
$ echo !-2:*:q
a b c d e  -> ejecuta un echo 'a b c d e'
$ echo !-3:1:2:4:x
a b d  -> ejecuta un echo 'a' 'b' 'd'
$ echo !-4:1-3:s/a/foo/:s/b/bar/:s/c/baz/
foo bar baz
$ tar -xzf paquete.tar
$ cd !-1:$:r
cd paquete
$ ls -a /tmp
$ ^-a^-l^ -> sustituye -a por -l
ls -l /tmp
$ ls -a /tmp
$ !!:s/-a/-l/ -> sustituye -a por -l
ls -l /tmp
$ echo papa papa papa
$ !!:s/papa/mama/
echo mama papa papa
$ !!:sg/papa/mama/
echo mama mama mama
$ echo papa mama hijo hija
$ echo !!:3-4 -> recupera parámetros 3 y 4
echo hijo hija
$ echo !!:* -> recupera todos los parámetros
echo hijo hija
$ echo echo papa mama hijo hija
$ !!:1-$ -> recupera los parámetros del 1 al final. Ejecuta el primer parámetro como instrucción
echo papa mama hijo hija

http://www.catonmat.net

  • linux/bash/historyexpansion.txt
  • Darrera modificació: 20/01/2020 01:16
  • per mate