有人能解释一下这个 grep/cut/awk 命令在做什么吗?

有人能解释一下这个 grep/cut/awk 命令在做什么吗?

这是.sh 脚本文件的内部:

cd /somefolder  
IP=$(ifconfig | grep 'inet addr:'| grep 168 | grep 192|cut -d: -f2 | awk '{print $1}')

/somefolder 有另一个文件夹列表,其中包含一个文本文件。

有人可以解释一下上述命令的作用吗,它将 bash 与 grep 和 awk 结合起来。

另外,为了调试它并更好地理解它,我是否也可以在命令行中运行它?

答案1

ifconfig给你留下如下一段文字:

eth0      Link encap:Ethernet  HWaddr aa:aa:aa:aa:aa:aa  
          inet addr:192.168.0.4  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::6ef0:49ff:fe54:b80/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:118583044 errors:0 dropped:0 overruns:0 frame:0
          TX packets:117593447 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:86729976752 (86.7 GB)  TX bytes:96008613785 (96.0 GB)

第一个grep过滤器会过滤包含的行inet addr:,剩下:

          inet addr:192.168.0.4  Bcast:192.168.0.255  Mask:255.255.255.0

接下来的两个grep命令再次进行过滤,查找192168。我认为它正在搜索本地 IP。看起来像 的 IP 192.168.*.*。并非所有本地 IP 都看起来像那样,但我现在先忽略它。

在我们的示例中,没有其他内容被过滤掉。

然后切割:用作分隔符(切割点)并取第二个值:

192.168.0.4  Bcast

awk默认以空格分隔并打印第一列,剩下:

192.168.0.4

这是一个尝试获取本地 IP 的脚本。它不太好用。如果您的 LAN 使用不同的寻址格式,或者您有一个合法的(外部)IP,其中包含 192 或 168 或其掩码 — 如 4.4.168.192 — 这会错误地捕获它。

可能有比过滤ifconfig输出更好的方法来获取你的内部 IP,但这里是另一种只使用一个 awk 来清理的过滤方法:

ifconfig | awk -F' |:' '/inet addr:192\.168\./ {print $13}'

它只适用于 192.168。地址,但这已经比现有的命令更好了。

相关内容