如何删除字符串的一部分

克里斯

我一直在阅读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()

G-Man说“恢复莫妮卡”

您似乎想更改所有出现的

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章