tcl usa chaves como aspas, em vez de marcas de aspas simples. Isso funcionaria:
grep {[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]} file1 > file2
mas lembre-se de que, se não houver correspondência, ainda haverá um erro relatado, por exemplo,
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)
Para que , a documentação do Tcl indica que você deve colocar seu comando em um bloco catch
, por exemplo,
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
}
}
Leitura adicional:
-
tcl - Entendendo o uso de chaves
Uma das respostas diz que chaves são análogas às ações de aspas simples e aspas duplas do shell, como aspas duplas do shell, mas não esclarecem que o último ato tcl e o uso de aspas duplas produzir um erroinvalid command name "A-Z"
.