【发布时间】:2019-08-13 03:10:48
【问题描述】:
我正在处理大量代码,需要重命名很多 API。这包括所有 API 的前缀。我的 API 名称类似于:
MyfoobarFilename_FooFighterDoMeAFavor(MyfoobarFilename_FooFighter *FighterInstance, void *Favor)
MyfoobarFilename_FooFighterGetInLine(MyfoobarFilename_FooFighter *FighterInstance, void *Line)
MyfoobarFilename_FooFighterSetATicketForMe(MyfoobarFilename_FooFighter *FighterInstance, void *Ticket)
MyfoobarFilename_FooFighterHelpMeNowInterrupt(MyfoobarFilename_FooFighter *FighterInstance, void *FighterReference)
MyfoobarFilename_FooFighterAreYouOk(MyfoobarFilename_FooFighter *FighterInstance, unsigned int HowAreYou)
我想通过在 API 名称中添加下划线来更改所有这些名称。
我希望结果如下所示,
MyfoobarFilename_FooFighter_DoMeAFavor(MyfoobarFilename_FooFighter *FighterInstance, void *Favor)
MyfoobarFilename_FooFighter_GetInLine(MyfoobarFilename_FooFighter *FighterInstance, void *Line)
MyfoobarFilename_FooFighter_SetATicketForMe(MyfoobarFilename_FooFighter *FighterInstance, void *Ticket)
MyfoobarFilename_FooFighter_HelpMeNowInterrupt(MyfoobarFilename_FooFighter *FighterInstance, void *FighterReference)
MyfoobarFilename_FooFighter_AreYouOk(MyfoobarFilename_FooFighter *FighterInstance, unsigned int HowAreYou)
但是,我只想替换 API 名称中的文本,而不是代码中的其他位置。我可以使用s/FooFighter/FooFighter_/g,但这也会做出我不想要的更改。
我可以通过多种方式通过使用脚本并执行 grep 和替换来做到这一点。
但是,必须有一种更快、更智能的方法来使用单个命令(希望使用 sed)来执行此操作。有人可以启发我如何做到这一点。
提前致谢。
【问题讨论】: