从linux中的文本文件中提取信息

时间:2013-07-25 19:14:00

标签: linux bash

#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"

现在我想从这个文件中提取以下数字并存储在不同的变量中供以后使用,让我们使用Version,Build和Serial。

4.00, 656, and FGT50B3G07518374 

这些数字可以改变。任何人都可以告诉我如何提取这些信息。我知道我可以使用sed但无法弄清楚这个要求的正确语法。

2 个答案:

答案 0 :(得分:2)

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

将获得带有小数点的所有数字(如果您的格式保持不变,则应该为您提供4.00

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

应该在第一行build之后得到任何数字

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

应该为您提供引号中包含的任何单行字符串,这似乎会为您提供主机名。除非文件的其他格式可能有引号。

答案 1 :(得分: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