GNU/Linux >> Tutoriales Linux >  >> Linux

15 ejemplos de expansión del historial de Linux Bash que debe conocer

El historial de Bash es muy poderoso. Comprender cómo usar de manera efectiva las expansiones del historial de bash lo hará extremadamente productivo en la línea de comandos de Linux.

Este artículo explica 15 ejemplos que utilizan las siguientes funciones de expansión del historial de bash:

  • Designadores de eventos:se refiere a un comando particular en el historial. Comienza con un !
  • Designadores de palabras:se refiere a una palabra particular de una entrada del historial. Por lo general, esto se combina con un designador par. Incluso los designadores y los designadores de palabras están separados por dos puntos
  • Modificadores:modifica el resultado de la sustitución realizada por los designadores de eventos o palabras

Este artículo es parte de nuestra serie de tutoriales de Bash en curso.

Como ya sabe, para ver todas las entradas del historial, use el comando historial. Esto mostrará todos los comandos que se ejecutaron anteriormente junto con el número de ese comando en la tabla de historial.

$ history
1 tar cvf etc.tar /etc/
2 cp /etc/passwd /backup
3 ps -ef | grep http
4 service sshd restart
5 /usr/local/apache2/bin/apachectl restart

Designadores de eventos del historial de Bash

1. Ejecuta un comando específico del historial usando !n

Si ejecutó un comando anteriormente, en lugar de volver a escribirlo, puede ejecutarlo rápidamente utilizando el número correspondiente del comando en el historial.

Por ejemplo, para ejecutar el comando #4, haga lo siguiente. Esto mostrará el comando #4 del historial y lo ejecutará inmediatamente.

$ !4
service sshd restart

Para ejecutar un comando que se escribió 2 comandos atrás, haga lo siguiente.

$ !-2

Para ejecutar el comando anterior, realice cualquiera de las siguientes acciones:

$ !!

$ !-1

También puede presionar -P (si está en el modo emacs predeterminado) para acceder al comando anterior.

Si ha habilitado la edición de estilo vi para la línea de comando usando 'set -o vi', use -k para ir al comando anterior.

2. Ejecute un comando con palabras clave usando !string y !?string

También puede usar palabras clave para ejecutar un comando del historial.

El siguiente ejemplo buscará el comando anterior que COMIENCE con la palabra clave “ps” y ejecútelo. En este ejemplo, recoge el comando anterior “ps -ef | grep http” y lo ejecuta.

$ !ps
ps -ef | grep http

El siguiente ejemplo buscará el comando anterior que CONTIENE la palabra clave “apache” y ejecútelo. En este ejemplo, toma el comando anterior “/usr/local/apache2/bin/apachectl restart” y lo ejecuta.

$ !?apache
/usr/local/apache2/bin/apachectl restart

3. Reemplace una cadena del comando anterior usando ^str1^str2^

En el siguiente ejemplo, primero ejecutamos el comando ls para verificar un archivo. Más tarde nos dimos cuenta de que queremos ver el contenido del archivo. En lugar de escribir el nombre completo del archivo nuevamente, podemos simplemente reemplazar "ls" en el comando anterior con "cat" como se muestra a continuación.

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

Nota:Para obtener consejos adicionales sobre el historial de bash, consulte 15 ejemplos para dominar el historial de línea de comandos de Linux. Esto explica cómo mostrar la marca de tiempo en el historial y cómo usar varias variables de entorno relacionadas con el historial, incluidas HISTTIMEFORMAT, HISTSIZE, HISTFILE, HISTCONTROL e HISTIGNORE

Designadores de palabras del historial de Bash

Los designadores de palabras son muy útiles cuando desea escribir un nuevo comando, pero use el argumento de uno de los comandos que se ejecutó anteriormente. Algunos de los ejemplos se muestran a continuación.

4. Obtén el primer argumento de un comando usando :^

En el siguiente ejemplo, "!cp:^" se proporcionó como argumento para el comando "ls -l". “!cp:^” ubica el comando anterior en el historial que comienza con “cp” y obtiene el primer argumento de ese comando.

$ cp /etc/passwd /backup

$ ls -l !cp:^
ls -l /etc/passwd

El siguiente ejemplo obtiene el primer argumento del comando anterior.

$ ls -l !!:^

5. Obtén el último argumento de un comando usando :$

En el siguiente ejemplo, “!cp:$” se proporcionó como argumento para el comando “ls -l”. “!cp:$” ubica el comando anterior en el historial que comienza con “cp” y obtiene el último argumento de ese comando.

$ cp /etc/passwd /backup

$ ls -l !cp:$
ls -l /backup

El siguiente ejemplo obtiene el último argumento del comando anterior.

$ls -l !!:$

6. Obtenga el enésimo argumento de un comando usando :n

En el siguiente ejemplo, "!tar:2" se proporcionó como argumento para el comando "ls -l". “!tar:2” ubica el comando anterior en el historial que comienza con “tar” y obtiene el segundo argumento de ese comando.

$ tar cvfz /backup/home-dir-backup.tar.gz /home

$ ls -l !tar:2
ls -l /backup/home-dir-backup.tar.gz

7. Obtén todos los argumentos de un comando usando :*

En el siguiente ejemplo, "!cp:*" se proporcionó como argumento para el comando "ls -l". “!cp:*” ubica el comando anterior en el historial que comienza con “cp” y obtiene todos sus argumentos.

$ cp /etc/passwd /backup

$ ls -l !cp:*
ls -l /etc/passwd /backup

8. Consulte la palabra buscada recientemente con !%

Como explicamos anteriormente, el “!?apache” buscará el comando de historial anterior que CONTIENE la palabra clave “apache” y lo ejecutará.

$ /usr/local/apache2/bin/apachectl restart

$ !?apache
/usr/local/apache2/bin/apachectl restart

!% se referirá a la palabra completa que coincidió con el anterior "?" buscar.

Por ejemplo, si ha buscado anteriormente "?apache", el "!%" coincidirá con la palabra completa "/usr/local/apache2/bin/apachectl". Tenga en cuenta que "/" se trata como parte de una palabra en este contexto.

Entonces, en este caso, al ejecutar lo siguiente, puede detener el apache.

$ !% stop
/usr/local/apache2/bin/apachectl stop

9. Obtenga un rango de argumentos de un comando usando x-y

En el siguiente ejemplo, se proporcionó “!tar:3-5” como argumento para el comando “ls -l”. “!tar:3-5” ubica el comando anterior en el historial que comienza con “tar” y obtiene los argumentos del 3 al 5.

$ tar cvf home-dir.tar john jason ramesh rita

$ ls -l !tar:3-5
ls -l john jason ramesh

Lo siguiente obtiene todos los argumentos de 2.

$ ls -l !tar:2-$

Tenga en cuenta lo siguiente:

  • !!:* Obtiene todos los argumentos del comando anterior
  • !!:2* Obtiene todos los argumentos a partir del segundo argumento.
  • !!:2-$ Igual que arriba. Obtiene todos los argumentos a partir del segundo argumento.
  • !!:2- Obtiene todos los argumentos a partir del segundo argumento (excepto el último argumento).

Modificadores de historial de Bash

Los modificadores se dan después de los designadores de palabras, como se explica en los ejemplos a continuación.

10. Elimine el nombre de la ruta final de una palabra usando :h

En el siguiente ejemplo, “!!:$:h” toma el último argumento del comando anterior y elimina el nombre de ruta final. En este caso, elimina el nombre del archivo y solo obtiene la ruta completa.

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:h
ls -l /very/long/path/name

11. Elimine todos los nombres de ruta principales de una palabra usando :t

Esto es exactamente lo contrario del ejemplo anterior.

En el siguiente ejemplo, “!!:$:t” toma el último argumento del comando anterior y elimina todos los nombres de rutas iniciales. En este caso, solo obtiene el nombre del archivo.

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:t
ls -l file-name.txt

12. Elimina la extensión del nombre de archivo de una palabra usando :r

En el siguiente ejemplo, “!!:$:r” toma el último argumento del comando anterior y elimina solo el “.sufijo” (que aquí es la extensión del nombre de archivo). En este caso, eliminó .txt

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:r
ls -l /very/long/path/name/file-name

13. Sed como Sustitución en el historial de bash usando :s/str1/str2/

En lugar de usar el "^reemplazo^original^" como discutimos anteriormente, también podemos usar una sustitución tipo sed en el historial de bash como se muestra en el ejemplo a continuación. Esto podría ser fácil de recordar. !! es llamar al comando anterior, “:s/cadena-original/cadena-de-reemplazo/” es la sintaxis similar a sed para reemplazar una cadena.

$ !!:s/ls -l/cat/

También puede usar la bandera g (junto con la bandera s) para hacer una sustitución global como se muestra a continuación. Esto es útil cuando ha escrito mal varias palabras y desea cambiarlas todas juntas y ejecutar el comando nuevamente.

En el siguiente ejemplo, por error he dado "contraseña" dos veces (en lugar de contraseña).

$ cp /etc/password /backup/password.bak

Para arreglar esto, simplemente haga el siguiente historial global sed como sustitución.

$ !!:gs/password/passwd/
cp /etc/passwd /backup/passwd.bak

14. Repite la sustitución rápidamente usando :&

Si ya ejecutó con éxito una sustitución del historial de bash como se muestra arriba, puede repetir la misma sustitución rápidamente usando :&.

Por error, he vuelto a escribir "contraseña" en lugar de "contraseña" en otro comando.

$ tar cvf password.tar /etc/password

Ahora, en lugar de volver a escribir el comando o hacer "gs/password/passwd", puedo usar ":&", que reutilizará la última sustitución. Use “:g&” para reutilizar la última sustitución globalmente.

$ !!:g&
tar cvf passwd.tar /etc/passwd

15. Imprime el comando sin ejecutarlo usando :p

Esto es muy útil cuando está realizando una sustitución de historial compleja y desea ver el comando final antes de ejecutarlo.

En el siguiente ejemplo, “!tar:3-:p”, en realidad no ejecuta el comando.

Como hemos dado ":p" aquí, simplemente hace la sustitución y muestra el nuevo comando. Una vez que haya verificado la expansión del historial de bash, y si cree que este es el comando que pretendía ejecutar, elimine ":p" y ejecútelo nuevamente.

$ tar cvf home-dir.tar john jason ramesh rita

$ tar cvfz new-file.tar !tar:3-:p
tar cvfz new-file.tar john jason ramesh

Linux
  1. Cómo borrar el historial de Bash en Linux

  2. 15 ejemplos para dominar la historia de la línea de comandos de Linux

  3. 7 ejemplos de comandos Linux df

  4. 8 ejemplos de comandos TR de Linux

  5. UNIX/Linux:ejemplos del comando bash history para repetir los últimos comandos

Tutorial de comandos de historia de Linux para principiantes (8 ejemplos)

Comando de historial en Linux con ejemplos

Cómo habilitar la marca de tiempo en el historial de Bash en Linux

Comando Bash Echo explicado con ejemplos en Linux

5 trucos simples de Bash History que todo usuario de Linux debe saber

Ejemplos de comandos id en Linux