2010-02-17 23 views
23

Di tanto in tanto io uso il comando bash per sostituire stringa nel precedente comando:Unix storia di comando sostituzione^foo^bar (per sostituzioni multiple)

^foo^bar 

Oggi ho voluto fare la sostituzione nella riga seguente per la sostituzione di tutti i occorrenze di checkbox con `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 

Quindi sostituisce solo la prima occorrenza. Come faccio a sostituire tutte le occorrenze?

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

risposta

32

man bash dice ^old^new è equivalente a !!:s/old/new/. Si desidera sostituire !!:gs/old/new/ a livello globale.

+0

Grazie mille! A questo punto, i comandi di bash appaiono improvvisamente molto brutti e non leggibili. Ma è incredibile quello che puoi fare! –

+0

Sono d'accordo! Quella g appartiene sicuramente alla fine! – dubiousjim

+1

Sì, sono abbastanza sicuro che vuoi !!: s/vecchio/nuovo/g, quindi nel caso del questionario originale, vuoi !!: s/checkbox/radio/g – Jim

13

Un modo semplice di fare questo sarebbe:

fc -s checkbox=radio 

Ho un alias r definito nel mio .bashrc:

alias r='fc -s' 

Allora che cosa si vuole fare diventa:

r checkbox=radio 

Vedere my answer in "hidden features of bash "domanda per i dettagli.

+0

Questa dovrebbe essere ** la ** risposta, in quanto è così facile da ricordare e altrimenti ho google ogni volta che ho bisogno di farlo. – xpt