在 tcl 中执行带有美元符号的 perl 命令

问题描述 投票:0回答:1

我调用 grep/perl 命令从 tcl 脚本中的文件中提取子字符串。但是我找不到在 perl 脚本中转义 $ 的方法。

这是我的命令:

set varA [exec grep ^library $file | perl -pe 's/.*\(\s*"*(.*?)"*\s*\).*/$1/']

tcl 会报告错误

no variable '1'
。根据一些指导,我用
$
转义了
{$}
,但是 perl 命令在
{}
转义之后不起作用。有什么建议吗?

perl tcl
1个回答
0
投票

整个参数括在大括号中以防止计算:

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]
© www.soinside.com 2019 - 2024. All rights reserved.