我有一个 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}'