2010-02-17 9 views
23

De vez en cuando utilice el comando bash para reemplazar cadena en orden anterior:Unix historia de comandos sustitución^foo^bar (para múltiples sustituciones)

^foo^bar 

Hoy quería hacer el reemplazo en la siguiente línea para la sustitución de todos ocurrencias de checkbox con `de radio:

$ git mv _product_checkbox_buttons.html.erb _product_checkbox_button.html.erb 
$ ^checkbox^radio 
git mv _product_radio_buttons.html.erb _product_checkbox_button.html.erb 

Por lo tanto, sólo se sustituye la primera ocurrencia. ¿Cómo hago para que reemplace todas las ocurrencias?

bash --version 
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) 
Copyright (C) 2007 Free Software Foundation, Inc. 

Respuesta

32

man bash^old^new dice es equivalente a !!:s/old/new/. Desea !!:gs/old/new/ para reemplazar globalmente.

+0

¡Muchas gracias! En este punto, los comandos bash de repente aparecen muy feos y no legibles. ¡Pero es increíble lo que puedes hacer! –

+0

Estoy de acuerdo! ¡Esa g definitivamente pertenece al final! – dubiousjim

+1

Sí, estoy bastante seguro de que quieres !!: s/old/new/g, entonces en el caso del interrogador original, quieres !!: s/checkbox/radio/g – Jim

13

Una manera fácil de hacer esto sería:

fc -s checkbox=radio 

tengo un alias r define en mi .bashrc:

alias r='fc -s' 

Entonces lo que quiere hacer se convierte en:

r checkbox=radio 

Ver my answer para "hidden features of bash "pregunta por detalles.

+0

Esto debería ser ** la ** respuesta, ya que es tan fácil de recordar y de lo contrario tengo Google cada vez que necesito hacer esto. – xpt

Cuestiones relacionadas