从终端输出中分离出具体信息

从终端输出中分离出具体信息

如何缩短输入命令后检索到的数据?例如,如果我输入:

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

我自己选择的武器:

  1. 使用 grep 并-w指定仅搜索全词匹配的选项。这样我们就不会抓取inet6太多。
  2. 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 

相关内容