我需要将此continues输出的结果写入文件,但不要使用此命令显示结果:
tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}' | sed 's/"//g'
仅使用此命令输出结果(不带“ sed”):
tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}'
是否可以进行任何循环来存储和显示3个变量?
echo "${requested-ip} | ${client-id} | ${hostname}"
脚本为:
tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}' | sed 's/"//g' | while read b; do
requested-ip=`echo $b | head -1`
cliend-id=`echo $b | tail -2 | head -1`
hostname=`echo $b | tail -2 | tail -1`
echo "${requested-ip} | ${client-id} | ${hostname}"
done
,与此无关。不明白,因为添加了while和sed无法运行
这是不带管道 grep 和 awk 的完整输出:
[root@PIDORA ~]# tcpdump -lni eth0 -vvv -s 0 port bootps
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:49:36.019930 IP (tos 0x0, ttl 255, id 22335, offset 0, flags [none], proto UDP (17), length 328)
0.0.0.0.bootpc > 255.255.255.255.bootps: [udp sum ok] BOOTP/DHCP, Request from 98:9e:63:57:9d:1e, length 300, xid 0xfefa864b, Flags [none] (0x0000)
Client-Ethernet-Address 98:9e:63:57:8d:1e
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Request
Parameter-Request Option 55, length 7:
Subnet-Mask, Classless-Static-Route, Default-Gateway, Domain-Name-Server
Domain-Name, Option 119, Option 252
MSZ Option 57, length 2: 1500
Client-ID Option 61, length 7: ether 98:9e:63:57:8d:1e
Requested-IP Option 50, length 4: 10.0.1.16
Lease-Time Option 51, length 4: 7776000
Hostname Option 12, length 7: "iGPhone"
END Option 255, length 0
PAD Option 0, length 0, occurs 13
答案 0 :(得分:2)
这是我的输出。 如果这样,我会得到一些结果:
[root@PIDORA tmp]# tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}'
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
98:9e:63:57:8d:1e
10.0.1.16
"iGPhone"
但是,如果我添加了解析器“ | sed's /” /// g'“,则看不到任何内容:
[root@PIDORA tmp]# tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}' | sed 's/"//g'
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
最后我输入for,结果是一样的。没有结果。
[root@PIDORA tmp]# for b in $( tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}' | sed 's/"//g'); do
> echo $b
> done
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
答案 1 :(得分:1)
发布完整的tcpdump输出后,我编辑了答案。
请注意,您的初始脚本中存在几个问题:
这是满足您需求的一种可行方法:
#!/bin/bash
for rawInfo in $( tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' |sort | awk '{print $NF}' | sed 's/"//g;s/$/,/' |tr -d '\n' ); do
requestedip=$( echo "$rawInfo" |awk -F ',' '{print $1}' )
hostname=$( echo "$rawInfo" |awk -F ',' '{print $2}' )
clientid=$( echo "$rawInfo" |awk -F ',' '{print $3}' )
echo "$requestedip | $clientid | $hostname"
done
注意:如果可以在其中一个值中添加','(不应...),则应使用另一个分隔符。
如果您需要其他说明,请告诉我。