Você parece querer alterar todas as ocorrências de
TRANF_FIELD.some_enum_value.toInt()
para
TRANF_FIELD.that_enum_value
enquanto deixa outras enumerações (por exemplo, TRANG_FIELD.TRANG_VALUE.toInt()
)
e outros métodos (por exemplo, TRANF_FIELD.TRANF_VALUE.length()
) sozinhos.
Isso parece simples:
sed 's/\(TRANF_FIELD\.[A-Za-z0-9_]*\)\.toInt()//'
onde
-
[A-Za-z0-9_]*
é qualquer número de caracteres alfanuméricos (incluindo sublinhados). Isso se destina a corresponder a qualquer valor de enumeração válido. Na verdade,[A-Za-z_][A-Za-z0-9_]*
seria melhor, porque[A-Za-z0-9_]*
pode corresponder a uma string vazia ou a uma que começa com um dígito. -
\(
…\)
agrupa o nome da enumeração (TRANF_FIELD
), o período literal (\.
), e o valor de enumeração (do primeiro marcador). -
significa "substituir a string completa que você encontrou com o primeiro grupo", ou seja, descarte a parte
.toInt()
. - Para lidar com várias ocorrências por linha, adicione
g
(global) após a última barra. - Isso não manipulará espaço em branco incorporado, por exemplo,
TRANF_FIELD . TRANF_VALUE
. Consertar isso é deixado como um exercício. -
Isso não manipulará expressões que estão quebradas nas linhas; por exemplo,
i = TRANF_FIELD .TRANF_VALUE.toInt();
Isso é mais difícil de corrigir.