2017-06-15 89 views
1

我正在使用expect腳本來執行命令,並希望從稍後打算在腳本中使用的輸出中提取一個數字。如果我只是在我的腳本中使用以下命令期望:從命令的輸出中提取負數

$expect_out(buffer) 

我得到它具有命令如下以及基於我的互聯網我修改劇本上看到的例子,實際輸出

# some_command | awk '{print $2}' 
-2520 

使用正則表達式來只提取號碼,但它似乎沒有工作時:

set prompt "(\\\$|#) $" 

... Login code goes here 

expect -re $prompt 
send "some_command | awk '{print \$2}'\r" --> Prints a negative number (not floating) i.e -2520 
expect -re {"^-[0-9]\d*"} 
set num $expect_out(0,string) 
puts "Result : $num" 

send "exit\r" 

出於某種原因,我不能提取從緩衝區的數目-2520。我得到的輸出是:

# Result : # 

我在做什麼錯?

+0

您需要刪除'「'從正則表達式:'期待-re {?^ - \ d +}' – komar

+0

@komar - '{^ - ?\ d +}'不起作用。請參閱https://stackoverflow.com/questions/40498940/expect-script-not-sending-commands-after-successful-ssh-login/40499422#40499422 – pynexj

回答

0

你建議立即進行刪除這樣寫:

expect -re {[\r\n](-?[0-9]+)} 
set num $expect_out(1,string) 

例子:

[STEP 101] # cat foo.exp 
set re_PS1 {bash-[.0-9]+[#$] $} 

spawn bash --norc 
expect -re $re_PS1 

send "[lindex $argv 0]\r" 
expect { 
    -re {[\r\n](-?[0-9]+)} { 
     set num $expect_out(1,string) 
     exp_continue 
    } 
    -re $re_PS1 
} 

send "exit\r" 
expect eof 

puts "result: $num" 
[STEP 102] # expect foo.exp 'expr 0 - 12345' 
spawn bash --norc 
bash-4.4# expr 0 - 12345 
-12345 
bash-4.4# exit 
exit 
result: -12345 
[STEP 103] # expect foo.exp 'expr 12345' 
spawn bash --norc 
bash-4.4# expr 12345 
12345 
bash-4.4# exit 
exit 
result: 12345 
[STEP 104] # 
+0

謝謝,那就是訣竅 – smokinguns