如何缩短输入命令后检索到的数据?例如,如果我输入:
ifconfig -a getifaddr
我只想要 IP 地址,别的什么都不需要。我肯定可以把其他东西添加到命令中,以便在检索到的大量文本中准确找到答案吧?
仅供参考,示例命令仅仅是一个例子
答案1
巧妙利用管道通常是答案。例如,您可以使用原始ifconfig
输出:
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.4 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::ca60:ff:fe06:ac5b prefixlen 64 scopeid 0x20<link>
ether c8:60:00:06:ac:5b txqueuelen 1000 (Ethernet)
RX packets 622902 bytes 792538068 (755.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 392538 bytes 37764707 (36.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
然后仔细查看此输出,直到看到所需的信息:
$ ifconfig eth0 | grep -w inet | cut -d ' ' -f 10
192.168.0.4
我自己选择的武器:
- 使用 grep 并
-w
指定仅搜索全词匹配的选项。这样我们就不会抓取inet6
太多。 cut
与使用分隔符 (-d
)空格,然后选择适当的场地(-f
)数字来获取我们想要的信息。
有很多工具可以做到这一点,而且毫无疑问有更好的方法来实现这一点特别的工作。但此示例展示了管道和一些可以使用的工具的用法。
答案2
补充一下 andrew.46s 的回答,这里是如何用 awk 和 sed 来实现的。同样需要巧妙地使用管道。
ifconfig -a | awk '/inet/{print $2;}' | sed 's/addr://'
使得:
127.0.0.1
192.168.0.12
从:
enp2s0 Link encap:Ethernet HWaddr 18:a9:05:e3:f6:ca
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:16
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:13845 errors:0 dropped:0 overruns:0 frame:0
TX packets:13845 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:1594329 (1.5 MB) TX bytes:1594329 (1.5 MB)
wlp6s0 Link encap:Ethernet HWaddr c4:17:fe:20:10:ed
inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::c617:feff:fe20:10ed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:104772 errors:0 dropped:0 overruns:0 frame:3603935
TX packets:78681 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:90707841 (90.7 MB) TX bytes:14272953 (14.2 MB)
Interrupt:17