macosx系统 如何编写一个shell脚本替换文件中多行中的特定字符串

如题:
aaa
123
123
123
123
123
eee
怎么匹配aaa~eee(开始结束字符串确定),然后替换123这样的;
在linux系统中,sed可以实现,sed -i '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' yourfile
但是mac上行不通诶,
报错:sed: 1:extra characters at the end of d command
网上说是要用sed i.bak 不过又报错:

sed: 1: "/env.dir/{:a;n;s/produc ...": unexpected EOF (pending }'s)

求教其他解决方法,麻烦写下具体命令行和解释~
问题描述可能有点不清楚了,上面aaa、123、eee只是举个例子,可能也是其他字符串,而且文件肯定不是这么简单的,
我的需求是:替换文件特定位置的指定字符串,然后能够在macos上运行
比如:
123
123
321

aaa
123
123
321
eee
123123
我要替换aaa到eee之间的123怎么办?aaa前面、eee后面的123都不能变

sed -i '' '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' yourfile
mac 上要求你必须对修改的文件进行备份,因此需要你这样写代码
sed -i 'yourfile.back' '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' yourfile
如果你不需要备份文件则直接将"yourfile.back"留空即可
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-12
cat yourfile | sed -e 's/[a-z]\{1,3\}/123/g'
这样试试看追问

明显aaa、123只是举个例子啊,我需要的是对所有指定位置的特定字符串通用,
首先,需要定位替换字符串的位置(因为其他地方可能也有,但不需要替换),这个定位需要根据某一行起始字符串进行定位
然后,才是对该字符串替换

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网