如何在方括号内grep参数?

时间:2017-02-09 17:24:12

标签: tcl

你能帮我解决下面的脚本吗?

这是Synopsys IC Compiler II将提供的Tcl脚本。

set_dont_use [get_lib_cells */*CKGT*0P*] -power
set_dont_use [get_lib_cells */*CKTT*0P*] -setup

我是否知道如何只使用*/*CKGT*0P**/*CKTT*0P*并将这些内容分配给变量。

2 个答案:

答案 0 :(得分:1)

当然,您可以将Tcl脚本视为您搜索的内容;毕竟它只是一个包含文本的文件。

让我们编写一个脚本来选择文本。当然,这将是一个Tcl脚本。为了便于阅读,我将把正则表达式本身放在一个全局变量中;把它当成一个常数。 (在较大的脚本中,我发现为RE提供这样的名称有很多帮助,因为这些名称可以用来提醒我正则表达式的目的。我会称之为“{ {1}}“这里。”

RE

RE上面的关键事项?它是 in braces 以减少反斜杠。文字方括号被反击。括号中的位是我们捕获到set f [open theScript.tcl] # Even with 10 million lines, modern computers will chew through it rapidly set lines [split [read $f] "\n"] close $f # This RE will match the sample lines you've told us about; it might need tuning # for other inputs (and knowing what's best is part of the art of RE writing) set RE {^set_dont_use \[get_lib_cells ([\w*/]+)\] -\w+$} foreach line $lines { if {[regexp $RE $line -> term]} { # At this point, the part you want is assigned to $term puts "FOUND: $term" } } 变量的位。 term匹配由“标准 w ord字符”加[\w*/]+*组成的集合中的一个或多个字符的序列。

/使用regexp作为忽略变量的有趣名称。我原本可以称之为->;当RE匹配时,它将在其中包含整个匹配的字符串,但是我们已经在dummy中使用了,因为我们正在使用完全锚定的RE。但我喜欢使用$term作为“将子匹配分配到这些”的助记符。此外,->的正式结果是RE匹配的次数;没有regexp选项,这实际上是一个布尔值,恰好在匹配时是真的,这很有用。非常有用。

答案 1 :(得分:0)

要将任何命令<command>的输出分配给名为<name>的变量,请使用set <name> [<command>]

> set hello_length [string length hello]
5
> puts "The length of 'hello' is $hello_length."
The length of 'hello' is 5.

在你的情况下,也许这就是你想要的? (但我仍然不太明白这个问题。)

set ckgt_cells [get_lib_cells */*CKGT*0P*]
set cktt_cells [get_lib_cells */*CKTT*0P*]