2010-02-17 62 views
23

偶尔我用的是bash命令在以前的命令来替换字符串:的Unix命令行历史替换^ FOO ^条(多替换)

^foo^bar 

今天我想作以下行更换更换所有出现的checkbox'收音机:

$ 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 

所以它只取代第一次出现。我如何让它取代所有的事件?

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

回答

32

man bash^old^new相当于!!:s/old/new/。你想要!!:gs/old/new/全局替换。

+0

非常感谢! 在这一点上,bash命令突然显得非常难看,不可读。但是你可以做的很棒! – 2010-02-17 13:56:42

+0

我同意!那绝对属于最后! – dubiousjim 2010-02-17 13:58:44

+1

是的,我很确定你想!!:s/old/new/g,所以在原始提问者的情况下,你想!!:s/checkbox/radio/g – Jim 2010-02-17 17:29:52

13

这样做的一个简单的方法是:

fc -s checkbox=radio 

我在.bashrc定义的别名r

alias r='fc -s' 

然后,你想做什么就变成了:

r checkbox=radio 

参见my answer至“hidden features of bash“问题的细节。

+0

这应该是**答案,因为它很容易记住,否则每次我需要这样做时都会有谷歌。 – xpt 2016-11-02 16:08:42