Bash Sed 管道命令一行

Bash Sed 管道命令一行

我正在尝试转储所有接口的输出。这是我目前得到的结果:

ifconfig | awk '{print $1}' | sed s'/.$//'

我想要类似的东西:

ifconfig | awk '{print $1}' | sed s'/.$//' | tcpdump -i {} -c 1

其中 {} 是管道中传递的内容。

更新:

以下是 ifconfig 的示例输出:

em0:封装:以太;帧:以太
        标志=0x3/0x8000
        当前媒体:i802 2:0:0:1:0:4
em0.0:标志=0x8000
        inet 主 mtu 1500 本地=129.16.0.1 目标=128.0.0.0/2 bcast=191.255.255.255
        tnp 主 mtu 1500 本地=17825796

awk 将打印出我需要传递给 tcpdump 的接口名称。

上述代码的等效运行如下:

tcpdump -i em0
tcpdump -i em0.0

我怎样才能用一行输出到 tcpdump?

答案1

ifconfig | grep -Po "^[^\s:]+" | 读取时如果;执行 tcpdump -i $if;完成
# tcpdump -i em0
# tcpdump -i em0.0

tcpdump `ifconfig | grep -Po“^[^\s:]+”| sed“s/^/-i /”`
# tcpdump -i em0 -i em0.0

答案2

我正在尝试转储所有接口的输出。

有什么原因导致您不直接使用名为any? 的特殊设备tcpdump -i any

http://www.tcpdump.org/tcpdump_man.html -i 接口

监听接口。如果未指定,tcpdump 将在系统接口列表中搜索编号最小、已配置的接口(不包括环回接口),例如,eth0''. On Linux systems with 2.2 or later kernels, an interface argument of可以使用 any'' 来捕获来自所有接口的数据包。请注意,在混杂模式下不会对“any”设备进行捕获。

相关内容