在本地IP地址为10.0.0.159的RHEL 7框上,以下命令输出IP 10.0.0.159:
$ echo "$(ifconfig eth0 | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | \
grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1')""(rw,sync)" 如果要打印“10.0.0.0/8”,命令必须更改为什么?
发布于 2018-08-11 01:08:15
注意: ifconfig是一个不推荐的cmd。您应该使用cmds。在未来的iproute2包中。下面,我将展示如何使用ip来使用替换工具来完成您想要的任务。
与其使用ifconfig执行此操作,不如使用ip命令。
此表单以CIDR符号显示IP地址:
$ ip addr list eth0 | awk '/inet.*brd/ {print $2}'
10.0.2.15/24
-or-
$ ip a l eth0 | awk '/inet.*brd/ {print $2}'
10.0.2.15/24此表单以CIDR符号显示网络地址:
$ ip route show | awk '/eth0.*scope/ {print $1}'
10.0.2.0/24您还可以使用ipcalc命令来操作上面的地址来计算其他格式。例如:
$ ipcalc -n $(ip a l eth0 | awk '/inet.*brd/ {print $2}')
NETWORK=10.0.2.0
$ ipcalc -p $(ip a l eth0 | awk '/inet.*brd/ {print $2}')
PREFIX=24使用ipcalc,您可以使用它更简单地形成您想要的任何变体,而不必执行大量的sed & awk来解析通常过于复杂的文本。
发布于 2018-08-11 01:53:12
若要更改命令行以执行您想做的事情,首先需要了解它正在做什么。下面是一个分析:
echo "$()""(rw,sync)" 将运行something并将其作为echo的输入。其他所有内容都是echo编辑的普通文本。
ifconfig eth0获取网络信息。
grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' 隔离系统中的几个in。-E告诉grep使用正则表达式,这就是为什么您可以使用[0-9]*来匹配所有数字,例如。-o告诉grep只输出与正则表达式匹配的部分,而不是像默认情况那样输出与grep条件匹配的整行。因此,例如,如果输入行是inet addr:10.0.0.159 Bcast:10.0.0.255 Mask:255.255.255.0,它将只输出inet addr:10.0.0.159,忽略Bcast和Mask部件。
grep -Eo '([0-9]*\.){3}[0-9]*' 这与上面完全相同,除非没有标签inet addr,这意味着您要专门隔离IP并移除标签。最后,
grep -v '127.0.0.1'是从输出列表中删除那个IP,因为您不关心回送IP。
正如您所看到的,您的命令是获取ifconfig的输出并过滤出信息,只隔离您想要的信息。它没有做任何计算或信息处理。但是您希望它打印的是子网和掩码,它们是ifconfig没有显式显示的信息。换句话说,你不能为了得到你想要的东西而对事物进行不同的过滤。您必须进行一些处理,使用行尾的Mask字段进行一些计算。总之,您不能“更改命令以打印您想要的内容”。您必须创建一个完全不同的命令。
slm的答案使用了类似的技术(过滤掉信息,只保留您想要的信息),但是将输入更改为一个命令,命令中包含您需要的信息。-)如果您没有一个完全输出所需的命令,并且对其进行一些处理是您唯一的选择,那么下面是一组丑陋的ifs,您将来可以用作示例或基础。它使用slm的第一个解决方案,并且假设您的掩码总是8、16或24。
ip a l eth1 | awk '/inet.*brd/ {split($2,add,"/");split(add[1],ip,".");if(add[2]<=24){ip[4]=0} if(add[2]<=16){ip[3]=0} if(add[2]<=8){ip[2]=0} print ip[1]"."ip[2]"."ip[3]"."ip[4]"/"add[2];}'该命令将ip的输出拆分为address (10.0.0.159)和掩码(8)。然后将IP分解成4个数字。然后根据掩码将数字设置为零。但这并不是按位计算,这意味着它只处理8,16和24面具,因为这是我硬编码的。;)
我希望你能更多地了解你手中的工具。^_^
https://unix.stackexchange.com/questions/461927
复制相似问题