我有一个像这样的列表:
puts $macro_info($macro,pins,$pin)
VDD { POLYGON -17.4000 233.0160 -42.0000 257.6160} { -42.0000 292.4160 -17.4000 317.0160} { 17.4000 317.0160 42.0000 292.4160} { 42.0000 257.6160 17.4000 233.0160 ;} { POLYGON 132.6000 233.0160 108.0000 257.6160} { 108.0000 292.4160 132.6000 317.0160} { 167.4000 317.0160 192.0000 292.4160} { 192.0000 257.6160 167.4000 233.0160 ;} { POLYGON 282.6000 233.0160 258.0000 257.6160} { 258.0000 292.4160 282.6000 317.0160} { 317.4000 317.0160 342.0000 292.4160} { 342.0000 257.6160 317.4000 233.0160 ;} { POLYGON 432.6000 233.0160 408.0000 257.6160} { 408.0000 292.4160 432.6000 317.0160} { 467.4000 317.0160 492.0000 292.4160} { 492.0000 257.6160 467.4000 233.0160 ;} { POLYGON 582.6000 233.0160 558.0000 257.6160} { 558.0000 292.4160 582.6000 317.0160} { 617.4000 317.0160 642.0000 292.4160} { 642.0000 257.6160 617.4000 233.0160 ;} { POLYGON 732.6000 233.0160 708.0000 257.6160} { 708.0000 292.4160 732.6000 317.0160} { 767.4000 317.0160 792.0000 292.4160} { 792.0000 257.6160 767.4000 233.0160 ;} { POLYGON 882.6000 233.0160 858.0000 257.6160} { 858.0000 292.4160 882.6000 317.0160} { 917.4000 317.0160 942.0000 292.4160} { 942.0000 257.6160 917.4000 233.0160 ;}
并且我想用分号字符搜索条目的列表索引。
例如lsearch -index 0 -all $macro_info($macro,pins,$pin) POLYGON
给了我
1 5 9 13 17 21 25
但是lsearch -index 0 -regexp -all $macro_info($macro,pins,$pin) [;]
让我
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
所以实际上我需要一些转义或其他操作。但是我尝试了各种事情。不起作用:
lsearch -index 0 -regexp -all $macro_info($macro,pins,$pin) {;}
lsearch -index 0 -regexp -all $macro_info($macro,pins,$pin) [;]
lsearch -index 0 -regexp -all $macro_info($macro,pins,$pin) ";"
这是什么问题?
答案 0 :(得分:1)
您可能想要
lsearch -all $macro_info($macro,pins,$pin) "*;*"
这是一个glob
/文本匹配搜索,用于在列表中某个项目的任何地方分号。
如果只希望将分号作为最后一个元素的项目(与示例数据中所有带有分号的项目相同),则可以指定它:
lsearch -all -index end $macro_info($macro,pins,$pin) ";"
由于它是命令行中的命令分隔符,因此您仍然需要转义分号(如";"
,{;}
或\;
)。
您的尝试失败有两个原因。一方面,您正在寻找每个项目的第一个元素,而所有分号是最后一个元素。另外,[;]
的值是一个空字符串(将搜索模式设置为-regexp
仅影响命令在内部处理参数的方式,而不影响在命令行中如何解释参数)。
答案 1 :(得分:0)
在示例输入中,分号始终是子列表的最后一个元素。在这种特殊情况下,您可以使用:
lsearch -all -index end $macro_info($macro,pins,$pin) {;}