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

use*_*361 24 macos shell bsd sed

我想知道如何使用单个sed语句进行多重查找/替换Mac OSX.我能够做到这一点, Ubuntu但由于其BSD性质OSX,命令必须略有改变.

所以,给定一个包含字符串的文件:

"Red Blue Red Blue Black Blue Red Blue Red"
Run Code Online (Sandbox Code Playgroud)

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

"Green Yellow Green Yellow Black Yellow Green Yellow Green"
Run Code Online (Sandbox Code Playgroud)

我的两个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 {} \;  
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几种分号和斜线的组合,并查看了Apple的开发人员页面上的sed,但由于缺少示例,我无法将它拼凑在一起.

Lar*_*off 24

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

find . -type f -exec sed -i '' -e s/Red/$color1/g -e s/Blue/$color2/g {} \;
Run Code Online (Sandbox Code Playgroud)

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


Foo*_*ooF 12

也可以sed使用分号组合命令;:

find . -type f -exec sed -i '' -e "s/Red/$color1/g; s/Blue/$color2/g" {} \;
Run Code Online (Sandbox Code Playgroud)

我想知道这是多么便携,并通过这个Stackoverflow找到答案链接到POSIX规范sed.特别是如果你有很多sed命令可以运行,这对我来说似乎比编写多个sed表达式更混乱.