2013-10-25 147 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表达式对我来说似乎不那么混乱。