Multiple replacements with one sed command

可紊 提交于 2019-11-27 17:15:47

问题


I'm wondering how I can do a multiple find/replace using a single sed statment in Mac OSX. I'm able to do this in Ubuntu but because of the BSD nature of OSX, the command must be slightly altered.

So, given a file with the string:

"Red Blue Red Blue Black Blue Red Blue Red"

I want to run a sed statement that results in the output:

"Green Yellow Green Yellow Black Yellow Green Yellow Green"

My two sed statements with a qualifying 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 {} \;  

I've tried several combinations of semicolons and slashes, and looked at Apple's Dev man page for sed but with a lack of examples, I couldn't piece it together.


回答1:


Apple's man page says Multiple commands may be specified by using the -e or -f options. So I'd say

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

This certainly works in Linux and other Unices.




回答2:


It should be also possible to combine sed commands using semicolon ;:

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

I was wondering how portable this is and found through this Stackoverflow answer a link to the POSIX specification of sed. Especially if you have a lot of sed commands to run, this seems less cluttered to me than writing multiple sed expressions.



来源:https://stackoverflow.com/questions/19590980/multiple-replacements-with-one-sed-command

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!