我调用 grep/perl 命令从 tcl 脚本中的文件中提取子字符串。但是我找不到在 perl 脚本中转义 $ 的方法。
这是我的命令:
set varA [exec grep ^library $file | perl -pe 's/.*\(\s*"*(.*?)"*\s*\).*/$1/']
tcl 会报告错误
no variable '1'
。根据一些指导,我用 $
转义了 {$}
,但是 perl 命令在 {}
转义之后不起作用。有什么建议吗?
将整个参数括在大括号中以防止计算:
set varA [exec grep ^library $file | perl -pe {s/.*\(\s*"*(.*?)"*\s*\).*/$1/}]
或者跳过
exec
并在 tcl 中完成所有操作:
proc fetch_file {filename} {
set f [open $filename]
set result ""
while {[gets $f line] >= 0} {
if {[string equal -length 7 library $line]} {
lappend result [regsub {.*\(\s*"*(.*?)"*\s*\).*} $line {\1}]
}
}
return [join $result \n]
}
set varA [fetch_file $file]