2011-11-22 15 views
5

Me gustaría saber cómo/si puedo reutilizar un comando de mi historial de terminales, pero en una versión modificada. He aquí un ejemplo:Buscar y reemplazar en comandos del historial de terminales

$ filter_script file2 > output_file2 
$ # ... 
# now run the same command, but replace '2' with '4' 
$ filter_script file4 > output_file4 

Este es un ejemplo muy simple, y por supuesto que se puede acceder simplemente a la orden de la historia y reemplazar manualmente los dos 2 s, pero hay una manera más elegante?

¡Muchas gracias por su tiempo!

Respuesta

12

Si sólo hay uno ejemplo de lo que sea que desee reemplazar, bash(1) tiene una característica fácil introducido por primera vez en csh(1):

^old^new 

sustituirá a la primera instancia de old con new:

$ filter_script file2 > output_file2 
$ ^2^4 
filter_script file4 > output_file2 

Si desea reemplazar todos los instancias, eso requiere más tipeo:

$ filter_script file2 > output_file2 
$ !:gs/2/4/ 
filter_script file4 > output_file4 

El g especifica el global de reemplazo en la línea de comandos. El ! se refiere a una línea del historial, que podría ser más específica, si desea extraer un comando de un historial posterior al comando inmediatamente anterior. Consulte la sección bash(1) en Event Designators.

+0

Genial, funciona como un amuleto - muchas gracias :) – canavanin

+1

¡Cosas ingeniosas, tenga un voto positivo! – plundra

+0

wow eso es realmente genial. –