tcl 表达式重命名文件中的多个字符串

tcl expression to rename multiple strings in a file

在一个文件中,我有多个字符串,

valid_packet,
rst_int_reg,
write_enb,
enb_read,
state_lfd, ...

我必须按照以下格式重命名字符串

validpacket
lfd_state
read_enb

我写了一个表达式来重命名一些字符串

set signals " valid_packet, rst_int_reg, write_enb, read_enb, state_lfd, ..."

set signals [regsub "valid_packet" $signals "validpacket"]
set signals [regsub "enb_read" $signals "read_enb"]
set signals [regsub "state_lfd" $signals "lfd_state"]
puts $signals 

对于每个字符串,我必须写相同的表达式,所以有没有优化的方法,因为如果我必须重命名文件中的许多字符串,我需要重复相同的表达式。

使用 string map 可以更好地完成此操作,它可以一次性转换整个文本中的许多不同单词,但您仍然需要写出要更改的内容,因为那里没有'这似乎是一种普遍模式(至少在 regular-expression 意义上)。

set signals " valid_packet, rst_int_reg, write_enb, read_enb, state_lfd, ..."

# This is a list of changes to do, but I like to put each transform on its own line
set mapping {
    "valid_packet" "validpacket"
    "enb_read" "read_enb"
    "state_lfd" "lfd_state"
}

# Apply the mapping
set signals [string map $mapping $signals]
puts $signals