2
#config-version=FGT50B-4.00-FW-build656-130211:opmode=0:vdom=0:user=admin
#conf_file_ver=4902373584228557200
#buildno=0656
#global_vdom=1
config system global
    set access-banner disable
    set admin-concurrent enable
    set admin-https-pki-required disable
    set admin-lockout-duration 60
    set gui-policy-interface-pairs-view enable
    set gui-voip-profile disable
    set hostname "FGT50B3G07518374"

现在我想从这个文件中提取以下数字并将其存储在不同的变量中以供以后使用,让我们在版本、构建和序列中使用。

4.00, 656, and FGT50B3G07518374 

这些数字可以改变。谁能告诉我如何提取这些信息。我知道我可以使用 sed,但无法找出满足此要求的正确语法。

4

2 回答 2

2
grep -o "[0-9]\.[0-9]\+"

将获得所有带小数点的数字(4.00如果您的格式保持不变,这应该会让您获得)

grep -o "build[0-9]\+" | sed "s/[^0-9]\+//"

应该让你得到build第一行后面的任何数字

grep -o "\".\+\"" | sed 's/"//g'

应该为您提供任何用引号括起来的单行字符串,这似乎为您提供了您的主机名。除非文件的其他格式可能有引号。

于 2013-07-25T19:30:44.010 回答
2

awk 可以在单个命令中执行此操作:

arr=( $(awk -F '[ =-]+' '$1=="#config"{print $4} $1=="#buildno"{print $2+0}
        $3=="hostname"{gsub(/"/, ""); print $4}' file) )

printf "%s\n" "${arr[@]}"

输出:

4.00
656
FGT50B3G07518374
于 2013-07-25T19:30:53.667 回答