我有一個 bash 腳本,它在 bash 腳本中使用了 Expect 。該 bash 腳本將在腳本的期望部分提示輸入密碼,然後傳回一些輸出。我想獲取該輸出並解析它,以便它只向我顯示輸出的一部分並將其儲存在普通 bash 腳本可以使用的變數中。我的腳本是:
#!/bin/sh
output=$(
/usr/bin/expect << EOF
spawn -noecho generate passcode -a 123456789
expect "passphrase:" { send "password\n" }
expect eof
EOF
#)
) | awk '/^ [a-zA-Z]*: (\S+)/'
echo $output
我在沒有 awk 正規表示式的情況下得到的輸出是:
Passcode: 543245324532455464
我的正規表示式將解析輸出並僅將543245324532455464
值儲存在輸出變數中。這正是我所希望的。如果我將 附加| awk '/^ [a-zA-Z]*: (\S+)/'
到命令末尾,它不會返回任何內容,只是空白。如果我把它取下來,它會返回我期望的輸出。
誰能告訴我如何將正確的資料儲存到 bash 中的變數?
答案1
如所寫,您捕獲 /usr/bin/expect 的輸出,然後將任何內容傳輸到 awk - 命令替換的右括號需要位於管道的末尾
不是
... ) | awk '/^ [a-zA-Z]*: (\S+)/'
但
... | awk '/^ [a-zA-Z]*: (\S+)/')
請注意,這\S
是非標準的(PCRE),並且可能並非所有版本的 awk 都支持,並且捕獲組可能不會產生任何效果 - 您可能會做得更好,例如
awk -F': ' '$1 ~ /Passcode/ {print $2}'