如何在 tcl 中执行 grep 以获得 XYZ-123 类型模式

如何在 tcl 中执行 grep 以获得 XYZ-123 类型模式

如何在 TCL 中执行此 grep 命令?

grep '[A-Z][A-Z][A-Z]\-[0-9][0-9][0-9]' file1 > file2

答案1

tcl使用大括号作为引号而不是单引号。这会起作用:

grep {[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]} file1 > file2

但请记住,如果没有匹配项,则会出现仍然报告错误,例如,

child process exited abnormally
    while executing
"exec grep {[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]} file1 > file2"
    (file "./foo" line 4)

为了, 这Tcl文档指出您应该将命令包装在一个catch块中,例如,

set status 0
if {[catch {exec grep {[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]} file1 > file2} results options]} {
    set details [dict get $options -errorcode]
    if {[lindex $details 0] eq "CHILDSTATUS"} {
        set status [lindex $details 2]
    } else {
        puts "unexpected error $options $results"
        set status 99
    }
}

进一步阅读:

  • tcl - 了解大括号的用法
    其中一个答案说大括号类似于 shell 的单引号,双引号的作用类似于 shell 的双引号,但没有澄清后者的作用之内 tcl并且使用双引号会产生invalid command name "A-Z"错误。

答案2

您尝试过仅使用吗exec

IE:

exec grep "[A-Z][A-Z][A-Z]\-[0-9][0-9][0-9]" file1 > file2

相关内容