Manipulación del historial de BASH: búsqueda y reemplazo

Manipulación del historial de BASH: búsqueda y reemplazo

Hay una función de expansión de parámetros/variables realmente útil en BASH que no veo en el historial. Revisé las páginas de manual para ver el historial y el propio BASH. No allí... tal vez me lo perdí.

Ejemplo: uso mucho ssh y puedo hacer esto con expansión variable.

[email protected]

Supongamos que quisiera extraer solo el host; en lugar de eso, eliminar el nombre de usuario.

hostonly=${host##*@}

Si yo

echo $hostonly

Yo obtengo:

bar.org

Mi pregunta: ¿Es posible hacer esto con el historial de la línea de comandos?

p.ej.,

Comando 1:

ssh [email protected]

Comando 2:

ssh gary@!!:##*@

Esto no funciona, por supuesto, pero ¿alguien puede confirmar si este tipo de coincidencia de patrones está disponible o no?

¡Gracias!

bubnoff

Respuesta1

Un buen truco que la gente suele pasar por alto es el rcomando (que es en sí mismo un caso especial del fccomando):

$ ssh [email protected]
(...)
$ r foo=baz

El caso más general es

$ fc -s foo=bar ssh

que le permite seleccionar un comando del historial por subcadena, luego realizar la sustitución especificada y ejecutarlo. Si deja de lado -s, cargará el comando $EDITORpara realizar modificaciones más complejas; La edición de la línea de comandos en su mayoría hace que esto sea innecesario, pero hay algunas ediciones que son difíciles de realizar en la línea de comandos.

También puede realizar una manipulación bastante compleja utilizando !la sintaxis de referencia histórica, pero por razones históricas (el mecanismo histórico básico se estableció temprano cshy todas las mejoras en su mayoría han mantenido la compatibilidad) utiliza una sintaxis diferente. Veraquípara detalles.

Respuesta2

$ ssh [email protected]
...
$ ^foo^gary^
...

El comando se repite usando "gary" como nombre de usuario en lugar de "foo". Lo siguiente funciona de la misma manera:

$ ssh [email protected]
...
$ !!:s/foo/gary/
...

información relacionada