任何人都可以帮助过滤enp37s0 Link encap:Ethernet HWaddr 2c:41:38:15:41:30
inet addr:192.168.0.105 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::89be:e3f9:b746:19ed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4593332 errors:0 dropped:0 overruns:0 frame:0
TX packets:2313662 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6506620971 (6.5 GB) TX bytes:182579364 (182.5 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:9574 errors:0 dropped:0 overruns:0 frame:0
TX packets:9574 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1100854 (1.1 MB) TX bytes:1100854 (1.1 MB)
wlo1 Link encap:Ethernet HWaddr d0:df:9a:6c:7c:1d
inet addr:192.168.0.103 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::225d:a288:5fa7:2237/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:124147 errors:0 dropped:0 overruns:0 frame:0
TX packets:2681 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:32988267 (32.9 MB) TX bytes:266523 (266.5 KB)
的信息
我得到的信息是
<div class="A">
<div>A</div>
</div>
我想得到。
答案 0 :(得分:0)
语法将根据您使用的操作系统而改变,但您可以使用一些sed
命令来获取所需的输出。例如,我的Arch Linux系统上的命令是ifconfig
(f
而不是p
),我的输出格式有点不同。但是这里应该适用于你的系统:
ipconfig | tr '\n' '~' | sed 's/~~/\n/g' | sed 's/~/ /g' | sed -E 's/^\s*(\S+)\s+.*\s+inet\s+(\S+)\s.*$/\1 \2/g'
我们在这里做了几件事:
~
,因为您的接口名称(enp37s0)和IP地址(192.168.0.105)位于不同的行上,我们需要将它们合并到同一行< / LI>
~~
(可能是两个连续的换行符 - 接口之间的分隔符)替换为单个换行符。这将有效地使sed
在其余步骤中分别对每个界面进行操作~
(本来是一个换行符);这可以确保我们不会无意中加入原始输出的任何部分(例如,我们可能会将前两行中的30inet
连接在一起,但我们需要30 inet
,因为我们正在寻找{ {1}} inet
单词,并在同一行后立即提取单词。我们也会丢弃第一个单词之后和inet
之前的所有内容,以及inet
之后单词之后的所有内容。这里的“单词”表示由空格分隔的任何内容。正则表达式中的inet
与空格匹配,\s
匹配任何非空格的内容,因此\S
找到我们的第一个单词,^\s*(\S+)\s+
除去后面的任何内容,{{1}找到.*
及其后面的单词,\s+inet\s+(\S+)\s
删除任何内容到行尾。这将在您的情况下产生以下内容:
inet
如果你想看看每个步骤的作用,你当然可以执行部分命令。
删除.*$
和/或将enp37s0 addr:192.168.0.105
lo addr:127.0.0.1
wlo1 addr:192.168.0.103
添加到结果中作为练习留给读者,因为可以使用类似的技巧。
答案 1 :(得分:0)
接受挑战:-)
试试这个单行:
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
在我的Debian上生成类似的东西:
for ip in $(hostname -I | grep -Eo '([0-9]*\.){3}[0-9]*'); do echo ""$(ifconfig | grep -B1 "inet addr:"$ip | cut -d " " -f1 | tr -d " ")" : "$ip"/"$(ifconfig | grep "inet addr:"$ip | grep -Eo 'Mask:?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*') ; done;
如果您有兴趣,可以参考一些细节:
wlan1 : 192.168.1.116/255.255.255.0
docker_gwbridge : 172.18.0.1/255.255.0.0
br-2c830dcde04d : 172.25.0.1/255.255.0.0
br-d6bc6df716ef : 172.21.0.1/255.255.0.0
br-d6fccd14dfad : 172.19.0.1/255.255.0.0
br-df4c2b24c7c0 : 172.24.0.1/255.255.0.0
docker0 : 172.17.0.1/255.255.0.0
br-ef0e82befd79 : 172.22.0.1/255.255.0.0
br-fad2fced45f8 : 172.20.0.1/255.255.0.0
在for ip in $(hostname -I | grep -Eo '([0-9]*\.){3}[0-9]*'); do
输出
hostname
在ifconfig | grep -B1 "inet addr:"$ip | cut -d " " -f1 | tr -d " ")
中取一条匹配的行和上面的那一行,然后将该行的第一个单词放在IP地址之上......这应该是接口的名称
ifconfig
再次获取该匹配行并搜索带有“Mask:”的标记,然后提取掩码
好吧,我知道,它不是纯粹的bash,可能不适用于所有操作系统变种,甚至ifconfig上的纯sed / grep,但是......编写它很有趣!