使用一个sed命令进行多次替换

时间:2013-10-25 13:18:06

标签: macos shell sed bsd

我想知道如何使用sed中的单个Mac OSX语句进行多重查找/替换。我可以在Ubuntu中执行此操作,但由于BSD的{​​{1}}性质,命令必须略有改动。

因此,给定一个包含字符串的文件:

OSX

我想运行一个导致输出的sed语句:

"Red Blue Red Blue Black Blue Red Blue Red"

我的两个sed语句带有符合条件的"Green Yellow Green Yellow Black Yellow Green Yellow Green"

find

我尝试了几种分号和斜线的组合,看了Apple's Dev man page for sed,但由于缺少示例,我无法将它拼凑在一起。

2 个答案:

答案 0 :(得分:24)

Apple的手册页说可以使用-e或-f选项指定多个命令。所以我想说

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

这肯定适用于Linux和其他Unices。

答案 1 :(得分:11)

也可以使用分号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表达式更加混乱。