2013-10-25 170 views
19

我想知道如何在Mac OSX中使用單個sed表示多個查找/替換。我可以在Ubuntu中做到這一點,但由於OSXBSD性質,該命令必須稍微改變。一個sed命令的多個替換

因此,考慮用字符串文件:

"Red Blue Red Blue Black Blue Red Blue Red" 

我想運行一個sed語句導致輸出:

"Green Yellow Green Yellow Black Yellow Green Yellow Green" 

我的兩個SED報表符合資格的find

color1="Green" 
color2="Yellow" 
find . -type f -exec sed -i '' s/Red/$color1/g {} \; 
find . -type f -exec sed -i '' s/Blue/$color2/g {} \; 

我試了幾種分號和斜槓的組合,在Apple's Dev man page for sed,但缺乏例子,我無法將它拼湊在一起。

+0

可能的[組合2 sed命令]重複(http://stackoverflow.com/questions/7657647/combining-2-sed-commands) – tripleee

回答

20

Apple的手冊頁說可以使用-e或-f選項指定多個命令。所以我想說

find . -type f -exec sed -i '' -e s/Red/$color1/g -e s/Blue/$color2/g {} \; 

這當然適用於Linux和其他聯合國。

+0

真棒,謝謝。原來我實際輸出到錯誤的目錄,但我可以證實這個作品。 – user1026361

9

應該也可以使用分號;sed命令組合:

find . -type f -exec sed -i '' -e "s/Red/$color1/g; s/Blue/$color2/g" {} \; 

我想知道如何移動,這是通過this Stackoverflow answer鏈接發現the POSIX specification of sed。特別是如果你有很多sed命令可以運行,那麼寫入多個sed表達式對我來說似乎不那麼混亂。