如果我剛剛進入Bash中下面的命令:插入符號搜索和Bash shell中替換
echo foo
我可以改變FOO通過鍵入吧:
^foo^bar
導致下面的命令執行:
echo bar
現在,如果我輸入:
echo foo foo
有沒有辦法通過使用插入符號(^
)運算符將foo的兩個實例更改爲bar?
此外,還有手冊頁外殼運營商如^
? man ^
結果爲「無手動輸入^」。
如果我剛剛進入Bash中下面的命令:插入符號搜索和Bash shell中替換
echo foo
我可以改變FOO通過鍵入吧:
^foo^bar
導致下面的命令執行:
echo bar
現在,如果我輸入:
echo foo foo
有沒有辦法通過使用插入符號(^
)運算符將foo的兩個實例更改爲bar?
此外,還有手冊頁外殼運營商如^
? man ^
結果爲「無手動輸入^」。
取代富那種特定功能被稱爲快速替換 ;其文檔可在Bash手冊的Event Designators部分找到。你不能快速替代你想做的事情;你得稍微詳細訴諸東西:
!!:gs/foo/bar/
@scanny:這似乎沒有記錄在任何地方,它不適用於我bash 4.2.10(1)。你使用的是什麼版本的shell('bash --version')? – 2013-09-27 14:56:41
糟糕,我的錯誤,大腦上的zsh! :S刪除評論。 – scanny 2013-09-27 20:45:42
我在OSX上不需要尾部斜線:'!!:gs/foo/bar' – 2015-07-29 21:22:19
也不知道如何與插入符號替代做到這一點,但這裏是你如何與歷史做:
!!:gs/foo/bar/
讓我打破下來:
! - 重新執行最後的命令。您還可以使用-2到兩個命令前運行,呼應運行回聲
開始最後的命令:!GS說做一個全球性的(所有實例)查找/替換。如果你想只是更換第一個實例,你可以使用「:S」
最後,/富/酒吧/說,與巴
插入符號替代和其他類似的快捷方式在事件標誌款的bash(1)
手冊頁的歷史擴展部分被發現。
^word^ ........... erase word
^word^^ ........... delete everything until the end of the line
這些對我來說都是一樣的:只從命令中移除單詞。 – 2011-06-01 05:22:46
同樣在這裏。 '%回聲「字逐字逐字」 字逐字逐字 %^字^^ 回聲「字字字字」 逐字逐字 ' – isomorphismes 2013-01-03 18:43:18
嘗試:
^foo^bar^:&
正如你所知道^foo^bar^
執行只是一個替代,而:&
修改重複它。
這將執行兩個換人,但不是全局替換。 – isomorphismes 2013-01-03 19:14:34
我發現你可以將多個「:&」修飾符傳遞給插入符替換。所以「:&」再次表示,而「:&:&」又表示兩次,依此類推。 (重複:&爲每個重複將變得乏味,並且我很高興知道!!:gs //。 – rickumali 2016-10-19 14:41:05
如果您正在尋找難以記憶的東西,完成與上述!!:gs/foo/bar/
相同的事情,您可以隨時在.bash_profile啓動腳本中創建一個函數。我選擇了replace()
。
replace() {
eval $(echo $(fc -ln -1) | eval "sed 's/${1}/${2}/g'") #compact form
}
,或較少迴旋
replace() {
string=$(fc -ln -1) #gets last command string
repcmmd="sed 's/${1}/${2}/g'" #build replacement sed command from fn input
eval $(echo $string | eval $repcmmd) #evaluates the replacement command
}
然後替換所有可以
echo foo foo
replace foo bar
感謝您的答案進行,希望換一種方式來使用重複的^語法,因爲這是我可以更容易記住的事情,但看起來我必須記住線路噪聲版本。 – mattjames 2010-01-27 19:12:22
如果您還認爲'^ string1^string2'已經等同於'!!:s/string1/string2 /',那麼您可能更容易記住「線路噪音」版本。 – isomorphismes 2013-01-03 18:45:38
@mattjames如果你想要更容易記住的東西,你可以看看我的答案,這是更少的「線噪音」-y – MLP 2017-08-17 22:55:31