String BASH将字符串拆分为自己的输出

String BASH将字符串拆分为自己的输出,string,bash,split,String,Bash,Split,我怎样才能分开这根绳子 22:45:47.349293 00:00:00:00:00>20:cf:30:39:60:69,以太网类型IPv4(0x0800),长度342:192.168.0.1>192.168.0.100.68:BOOTP/DHCP,应答,长度300 像这样排成一行 时间优先MAC地址优先IP 22:45:47 00:00:00:00:00 192.168.0.1 ? 我的实际结果是 时间:22:45:47 MAC:00:c0:26:00:bc:14 IP:192.168.0.1

我怎样才能分开这根绳子

22:45:47.349293 00:00:00:00:00>20:cf:30:39:60:69,以太网类型IPv4(0x0800),长度342:192.168.0.1>192.168.0.100.68:BOOTP/DHCP,应答,长度300

像这样排成一行

时间优先MAC地址优先IP

22:45:47 00:00:00:00:00 192.168.0.1

?

我的实际结果是

时间:22:45:47

MAC:00:c0:26:00:bc:14 IP:192.168.0.1

使用此代码

    cat $TEMPDATA | while read line
    do
    if [ "$line" != "" ]; then

    set -- $line

    echo TIME: "$line" | awk -F '[.]' '{print $1}'
    echo MAC: "$2" IP: "$10"
    echo



    fi

    done

这可以在bash中很容易地完成。这是快速高效的:

#!/bin/bash

string="22:45:47.349293 00:00:00:00:00:00 > 20:cf:30:39:60:69, ethertype IPv4 (0x0800), length 342: 192.168.0.1 > 192.168.0.100.68: BOOTP/DHCP, Reply, length 300"

time="${string%%.*}"
tmp="${string#* }"
mac="${tmp%% *}"
tmp="${string%\ \>*}"
ip="${tmp##*\:\ }"

echo "time: '$time', mac: '$mac', ip: '$ip'"
输出:

time: '22:45:47', mac: '00:00:00:00:00:00', ip: '192.168.0.1'
这看起来很不错:)但我如何才能将其修改为->时间:“22:45:47”,mac:“00:00:00:00:00”,ip:“192.168.0.1”???第一个mac地址应该在输出中。我是bash编程新手,我的尝试出错了。