对于我正在从事的项目,我尝试创建一个脚本来遍历名为 *Test*.java (例如 AccountServiceTest.java) 的所有文件。每个文件都包含 Java 测试方法。多年来,每个团队成员对命名约定的解释都不同,最终我们得到了一堆混乱的测试方法名称。作为一项重构任务,我试图正确重命名所有这些方法名称。手动操作会花费太长时间,因此我尝试使用 Bash 脚本来完成。该脚本应根据团队中讨论的规则更改方法的名称。
例如 :
...
public void givensomethingWhensomethingElseThensomethingElse() {
...
最终应该是这样的:
...
public void given_something_when_somethingElse_then_somethingElse() {
...
我现在认为应该采取以下步骤:
选择包含“public void”的行
捕获给定并确保它是小写的(GIVEN_something 导致给定的_something)
捕捉时间并确保它是小写的
catch then 并确保它是小写的
catch 给定和何时之间的字符串(或者有时方法名称中没有when语句)
- String found for example is _SomeRandomText - remove all _ --> SomeRandomText - change first character to lowercase --> someRandomText - add _ in front and in back --> _someRandomText_ - result is : ...given_someRandomText_when...
捕获when和then之间的字符串
- String found for example is _SomeRandomText - remove all _ --> SomeRandomText - change first character to lowercase --> someRandomText - add _ in front and in back --> _someRandomText_ - result is : ...when_someRandomText_then...
捕获 then 和括号之间的字符串
- String found for example is _SomeRandomText - remove all _ --> SomeRandomText - change first character to lowercase --> someRandomText - add _ in front --> _someRandomText - result is : ...then_someRandomText(...
我认为 sed 将是这里的解决方案,但我只是不知道如何创建它。有人有想法吗?
答案1
像这样:
$ sed -E '/public void.*given.*when.*then/s/_(\w)/\U\1/g' file
public void givenSomethingWhenSomethingElseThenSomethingElse() {
我不尊重5、6、7分,但现在你已经有足够的机会自己去适应它了。
_[a-z]
我在这里所做的是用大写的匹配字符替换。
如果您需要更换到位,添加-i
开关