Observe que split
não funciona como você parece pensar. Ele não se divide em uma palavra, mas em qualquer caractere dado na segunda cadeia. Por exemplo, split "xax" "abc"
dividirá xax
em 2 partes, apesar de não conter a seqüência abc
.
Uma maneira simples de dividir uma string em uma determinada substring é, por exemplo, usar o comando string first
para encontrar o início da substring e, em seguida, string range
para copiar até esse ponto:
set str $expect_out(buffer)
set v [string range $str 0 [string first "\[root@" $str]-1]
Você pode testar v
para vazio ou não.
Como alternativa, em vez de fazer expect "~]#"
, por que não expect "\[root@"
, então $expect_out(buffer)
já conterá o que você deseja extrair.
Para versões anteriores de tcl / expect, talvez seja necessário usar expr
para subtrair 1 do índice, em vez de permitir que string range
aceite o número do formulário. Então use, por exemplo:
set v [string range $str 0 [expr [string first "\[root@" $str] - 1]]