是否有 TCL cmd 来 grep 特定行并 awk 特定单词

Is there a TCL cmd to grep a particular line and awk a particular word

下面说的是我存储在 tcl 的配置变量中的内容。

#set config "configuration {
test_config {
    address 1.2.3.4:https
}
}"

使用 tcl cmd,grep 或 awk 或字符串 cmds,如何将“1.2.3.4:https”取出到变量中。

所以当我使用下面的方法时,

#puts $output
1.2.3.4:https

虽然

我知道如何简单地完成bash
#echo $config | grep address | awk '{print }'
#1.2.3.4:https

有人可以帮助 tcl 吗?我尝试探索字符串函数,但它们没有提供我需要的输出,我现在正在学习正则表达式。

您可能正在寻找 regexp 命令,尤其是 -line 选项。这里的技巧是使用\s*(或\s+)匹配空格,使用\S+匹配non-spaces.

if {[regexp -line {^\s*address\s+(\S+)} $config -> address]} {
    puts "The address is $address"
}

如果有多个 address 行,您可以改为:

foreach {-> address} [regexp -inline -all -line {^\s*address\s+(\S+)} $config] {
    puts "The address is $address"
}

我相信 Donal 的建议更有效:这是一种程序化的方法:

foreach line [split $config \n] {
    lassign [regexp -inline -all {\S+} $line] first second
    if {$first eq "address"} {
        set output $second
        break
    }
}