2016-05-15 6 views
0

Ich habe dieses einfache expect-Skript, das einen Befehl sendet und auf die Antwort wartet und nur einige der Zeilen übereinstimmen.wie an stdout im expect script nur die übereinstimmenden Zeilen gesendet werden

#!/usr/bin/expect -f 
log_user 0 

send "user --all\r" 
expect { 
timeout { send_user "\nTimeout during command\n"; exp_continue } 
-re "OK OK OK STARTED" { send_user "$expect_out(0,string)\n"; append dbscntl $expect_out(buffer); exp_continue } 
-re "Succeess!" { exp_continue } 
-re ">" 
} 
exit 0 

Wie kann ich in der Regex Linie die ganze Linie send_out, die den regulären Ausdruck „OK OK OK SCHRITTE“ abgestimmt wurde.

In meinem Code mit der send_user "$expect_out(0,string)\n"; gibt mir nur die passende Regex Ausdruck "OK OK OK STARTED" und nicht die ganze Zeile.

Beispiel von Linien, die mit dem regulären Ausdruck übereinstimmen würden:

0 Running  site1 OK OK OK STARTED 
1 Panding  site1 OK OK OK STARTED 
2 Running  site1 OK OK - STARTED 
3 Stopped  site1 - OK OK STARTED 

Jetzt würde ich bekommen:

OK OK OK STARTED 
OK OK OK STARTED 

Aber ich würde die Information der zweiten Spalte verpassen.

So würde Ich mag so etwas wie:

0 Running  site1 OK OK OK STARTED 
1 Panding  site1 OK OK OK STARTED 

Dank!

+0

Warum brauchen Sie dies zu erwarten? grep scheint die einfachste Lösung zu sein –

+0

Die Verwendung von exp_continue in einem Timeout-Block scheint nicht sinnvoll. –

+0

Um die obigen Fragen zu klären. 1. Dieser Code ist nur ein Teil des Expect-Skripts und der Befehl, der gesendet wird, wird nach Anmeldeinformationen fragen, deshalb erwarten. 2. Der Ausdruck des Befehls ist viel mehr als die Zeilen, die ich zuordnen möchte, also brauche ich exp_continue, bis ich '>' bekomme. – FotisK

Antwort

0

Nach den Vorschlägen und einigen Versuchen habe ich festgestellt, dass dies in meinem Fall -re "(?n)^DSG.*OK OK OK STARTED(.*)" { send_user "$expect_out(0,string)\n"; append dbscntl $expect_out(buffer); exp_continue } funktioniert.

Grundsätzlich hatte ich zwei Probleme:

  1. die Regex nicht mit dem \ m arbeiten und \ s
  2. die send_user benötigt, um die $ expect_out (0, string) mit ""
  3. einzuschließen