这是一个例子
Interface {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} IP-Address {} {} {} {} {} OK? Method Status {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {Protocol
FastEthernet0/0} {} {} {} {} {} {} {} {} {} {} {} unassigned {} {} {} {} {} YES unset {} administratively down down {} {} {} {
FastEthernet0/1} {} {} {} {} {} {} {} {} {} {} {} unassigned {} {} {} {} {} YES unset {} administratively down down
我想在此删除{}
我假设所有上面的字符串接口变量
set interface [string trimright [string trimleft $interface "{}"] "{}"]
但它不起作用。如何删除我的示例中的{}
?
答案 0 :(得分:6)
我怀疑你是这么做的:从一个字符串开始并尝试将其拆分为单词,只有Tcl的split
命令生成一个包含大量空值的列表:
set input "Interface IP-Address OK? Method Status ProtocolFastEthernet0/0 unassigned YES unset administratively down down FastEthernet0/1 unassigned YES unset administratively down down"
set fields [split $input] ;# ==> Interface {} {} {} ...
默认情况下,Tcl的split
在单个空白字符上进行拆分(与在连续的空白字符上拆分的awk或perl不同)。
您可以选择一些让您的生活更轻松的选择:
1)使用正则表达式查找所有“单词”
set fields [regexp -inline -all {\S+} $input]
2)使用textutil包进行拆分命令,其行为与您期望的一样:
package require textutil
set fields [textutil::splitx $input]
答案 1 :(得分:2)
你在那里看起来像一个TCL列表而不是字符串。因此,将数据视为列表,您可以这样:
set data [list a b {} {} e f {} {} g {}]
puts $data
set res {}
foreach ele $data {
if { $ele != {}} {lappend res $ele}
}
puts $res
答案 2 :(得分:0)
以下是您可以做的事情:
set y "Interface {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} IP-Address {} {} {} {} {} OK? Method Status {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {Protocol FastEthernet0/0} {} {} {} {} {} {} {} {} {} {} {} unassigned {} {} {} {} {} YES unset {} administratively down down {} {} {} {FastEthernet0/1} {} {} {} {} {} {} {} {} {} {} {} unassigned {} {} {} {} {} YES unset {} administratively down down"
set y [regsub -all ({}\ )+ $y ""]
这是结果:
Interface IP-Address OK? Method Status {Protocol FastEthernet0/0} unassigned YES unset administratively down down {FastEthernet0/1} unassigned YES unset administratively down down
Arpan
答案 3 :(得分:0)
我同意杰克逊的看法,你的数据似乎是一个列表(结构化数据)。你能确定数据的结构是什么吗?如果可以,那么您可以获取列表中的数据并正确解释值...而且{}段很可能是没有值的字段。对于(简化)示例:
set data {
Person Steve Smith employee
Position employee Employee 40
}
while {[llength $data] > 0} {
set type [lindex $data 0]
set data [lrange $data 1 end]
switch -exact -- $type {
Person {
set first_name [lindex $data 0]
set last_name [lindex $data 1]
set position_shortname [lindex $data 2]
set data [lrange $data 3 end]
}
Position {
set shortname [lindex $data 0]
set hourperweek [lindex $data 1]
set data [lrange $data 2 end]
}
default {
error "Unknown data type $type"
}
}
}
显然,数据和代码有点懊悔(我使用非常简单的代码来明确我正在做的事情),但这个想法应该是可以理解的。
所有这一切,对我来说“感觉”就像你的数据在某种程度上是“错误的”...就像在那里有一些缺少的大括号(比如FastEthernet0 / 0和0/1都应该是议定书的子女等)