我一直在阅读sed
文档和大量文章,但似乎无法弄清楚。我有大量的Java文件。在这些文件中,调用一个方法,该toInt()
方法使用该方法将枚举转换为整数。我想遍历所有文件并删除.toInt()
特定的枚举。
这就是我要的。原始代码字符串:
foo(ENUM_NAME.ENUM_VALUE.toInt(), arg2, arg3)
foo(ENUM_NAME.ENUM_VALUE2.toInt(), arg2, arg3)
我想结束于:
foo(ENUM_NAME.ENUM_VALUE, arg2, arg3)
foo(ENUM_NAME.ENUM_VALUE2, arg2, arg3)
ENUM_VALUE
可能有数百种不同的可能性,所以我不能硬编码。对于需要更改的内容,似乎有些混乱,因此我将尝试变得更加清晰。
TRANF_FIELD
我的Java文件中有一个枚举。可用于该枚举的值可以是2000个值之一,其后是.toInt()
。我需要摆脱掉.toInt()
。函数名称都不相关。
以下是在我的Java代码中散布的代码结构的示例以及应如何处理它们:
TRANF_FIELD.TRANF_VALUE_1.toInt()
我要.toInt()
删除,留下TRANF_FIELD.TRANF_VALUE_1
来。
TRANF_FIELD.TRANF_KILL_ME.toInt()
我想要.toInt()
删除,保留“TRANF_FIELD.TRANF_KILL_ME
TRANG_FIELD.TRANG_VALUE_1.toInt()
无更改”,因为不是TRANF_FIELD
。
TRANF_FIELD.TRANF_VALUE_1.length()
没有变化,因为不是.toInt()
。
您似乎想更改所有出现的
TRANF_FIELD.some_enum_value.toInt()
到
TRANF_FIELD.that_enum_value
同时不考虑其他枚举(例如TRANG_FIELD.TRANG_VALUE.toInt()
)和其他方法(例如TRANF_FIELD.TRANF_VALUE.length()
)。这看起来很简单:
sed 's/\(TRANF_FIELD\.[A-Za-z0-9_]*\)\.toInt()/\1/'
在哪里
[A-Za-z0-9_]*
是任意数量的字母数字字符(包括下划线)。这旨在匹配任何有效的枚举值。实际上,[A-Za-z_][A-Za-z0-9_]*
这样会更好,因为[A-Za-z0-9_]*
可以匹配一个空字符串或一个以数字开头的字符串。\(
…\)
将枚举名称(TRANF_FIELD
),立即数句段(\.
)和枚举值(从第一个项目符号开始)分组。\1
表示“用第一组替换找到的完整字符串”,即丢弃.toInt()
零件。g
在最后一个斜杠后添加(全局)。TRANF_FIELD . TRANF_VALUE
。解决这个问题留作练习。这将不会处理断行的表达式;例如,
i = TRANF_FIELD
.TRANF_VALUE.toInt();
这很难修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句