macOS下使用sed在指定函数闭括号前插入代码的方法
在macOS中用sed给init()函数末尾添加代码的正确方法
你当前的sed命令会把新代码插在init()函数开头,而你需要将其插入到函数闭合花括号}的上方,也就是函数末尾位置。
原文件内容
... init() { this.init_featureA(); this.init_featureB(); } ...
期望效果
... init() { this.init_featureA(); this.init_featureB(); this.init_featureC(); } ...
错误命令的问题
你之前的命令是匹配到init() {后直接追加内容,所以会插在函数定义行的下方,也就是函数开头:
sed -i '' -e '/init() {/ { a\\ this.init_featureC(); }' PATH-TO-FILE
正确的sed命令
针对macOS的BSD sed,使用范围匹配+行前插入的方式:
sed -i '' -e '/init() {/,/^}/ { /^}/ i\\ this.init_featureC(); }' PATH-TO-FILE
命令解释
- 范围限定:
/init() {/,/^}/把操作范围锁定在从init() {所在行到第一个以}开头的行(对应函数的闭合括号行,符合你的文件格式) - 插入操作:在这个范围内,匹配到行首为
}的行时,用i\命令在该行之前插入新的函数调用,刚好落在函数末尾的正确位置 - macOS sed语法注意:BSD sed要求
i\后面必须紧跟换行,所以命令里的换行格式不能省略
如果你的函数闭合括号不是单独占一行,需要调整匹配规则,但针对你给出的文件格式,这个命令可以完美实现需求。
内容的提问来源于stack exchange,提问作者JoSch
相关产品推荐
相关产品推荐

