2013-04-30 101 views
1

我想知道用於糾正先前執行的命令中的錯誤的最短命令。命令行 - 從前一個命令替換字符串並執行

鑑於我執行以下命令
cd /Users/USERNAME/Library/Preferences/ByHost

我想能夠執行一個新的命令,該命令將前指揮,管它通過grep或類似Unix的工具,然後執行。 (我承認沒有受過教育的)僞命令。
!! | xargs 's/$1/USERNAME/cirrostratus/g'

該命令將執行cd /Users/cirrostratus/Library/Preferences/ByHost

另外,管道一個字符串,搜索和替換它,並在一行中執行將是我的第二選擇。

+0

選擇「USER_NAME」或「USERNAME」,但保持一致。 'grep'用於查找文本; 'sed'用於改變文本; 'awk'可以用來改變文本,但對於場景來說可以說是過度的。你會期望'cd/Users/USER_NAME/Library/Preferences/ByHost'命令成功嗎? 'cd'是一個內置的命令,在某些方面使事情變得複雜。爲什麼不只是'cd〜cirrostratus/Library/Preferences/ByHost'?是否:'cd $(echo $ _ | sed's/USERNAME/cirrostratus /')'爲你工作? – 2013-04-30 05:15:36

+0

在腳本中,還是在命令行上? – tripleee 2013-04-30 05:15:42

+0

@tripleee在命令行中支持。 – 2013-04-30 05:33:51

回答

3

如果你想更換所有出現的字符串的(切換g),你需要寫:

!!:gs/oldstring/newstring/ 

這將取代oldstring通過newstring你是最後一個命令運行它們將結果存儲到歷史記錄中。

否則:然後syntaxe ^oldstring^newstring^爲快捷方式:

!!:s/oldstring/newstring/ 

只更換第一發現字符串的occurence。

+0

謝謝。有沒有辦法跳過兩次輸入(即一次執行替換並再次執行修改後的命令)? – 2013-04-30 06:59:52

+0

是的,但基於'陷阱調試... ...看看這個答案:http://stackoverflow.com/a/16284715/1765658 – 2013-04-30 08:14:18