LINUX.ORG.RU

bash распарсить стоку в переменные

 , ,


0

1

как распарсить snmp ответ вида iso.0.8802.1.1.2.1.4.1.1.5.91445542.25.2 = Hex-STRING: 1C AF F7 6C 5A 08 iso.0.8802.1.1.2.1.4.1.1.5.91445706.26.1 = Hex-STRING: 1C AF F7 6C 59 BF

в переменные вида mac1=1C AF F7 6C 5A 08 mac2=1C AF F7 6C 59 BF

? Я конечно нашел как сделать это по разделителю, но тут другое :( Ответ может быть несколько разным по длине, потому cut тут не подходит

если смел и уверен в себе, то awk умеет в несколько многосимвольных разделителей через ИЛИ

$ cat example
iso.0.8802.1.1.2.1.4.1.1.5.91445542.25.2 = Hex-STRING: 1C AF F7 6C 5A 08 iso.0.8802.1.1.2.1.4.1.1.5.91445706.26.1 = Hex-STRING: 1C AF F7 6C 59 BF
$ cat example | awk -F': | iso.' '{printf "%s\n%s\n",$2,$4}'
1C AF F7 6C 5A 08
1C AF F7 6C 59 BF

slowpony ★★ ()
i=0
while read l; do
        s=
        while [[ "$l" != "$s" ]]; do
                p=${l#* = Hex-STRING: }
                s=${p%% iso.*}
                l=${p#"$s "}
                eval mac$((++i))=\$s
                echo "mac$i=$s"
        done
done

$ cat t.txt
iso.0.8802.1.1.2.1.4.1.1.5.91445542.25.2 = Hex-STRING: 1C AF F7 6C 5A 08 iso.0.8802.1.1.2.1.4.1.1.5.91445706.26.1 = Hex-STRING: 1C AF F7 6C 59 BF

$ ./script.sh  < t.txt
mac1=1C AF F7 6C 5A 08
mac2=1C AF F7 6C 59 BF
vodz ★★★★ ()