管道时合并 grep 输出
Combine grep output when piping
我使用以下命令 sipcalc
来显示有关 IP 的信息:
sipcalc 192.16.12.1/16 | grep -E 'Network address|Network mask \(bits\)'
输出为:
Network address - 192.16.0.0
Network mask (bits) - 16
有没有办法合并上面的输出(只有右边的部分),所以输出是:
192.16.0.0/16
我有自己的方法来执行此操作,方法是分离 grep 调用然后连接结果,但我认为这不是一个好的解决方案。 grep 或任何其他可用于像 awk
这样的输出管道命令以获得上面的输出吗?
grep
而不是 确实是一个理想的工具,除了搜索您期望的文本之外,还可以执行其他操作。单独使用awk
!
awk '/Network address/{ ip = $NF } /Network mask \(bits\)/{ print ip "/" $NF}'
Awk 以 /pattern/ { action }
语法处理记录。因此,当第一个模式匹配时,提取由 space $NF
分隔的最后一个字段,即 Awk 用于存储由 space 分隔的最后一列的值的特殊变量(请参阅 7.5.1 Built-in Variables That Control awk)
当第二个模式以类似的方式匹配时,将最后一个字段与存储在 ip
变量中的值连接起来。 +
只是连接各个字符串以产生所需的结果。
我使用以下命令 sipcalc
来显示有关 IP 的信息:
sipcalc 192.16.12.1/16 | grep -E 'Network address|Network mask \(bits\)'
输出为:
Network address - 192.16.0.0
Network mask (bits) - 16
有没有办法合并上面的输出(只有右边的部分),所以输出是:
192.16.0.0/16
我有自己的方法来执行此操作,方法是分离 grep 调用然后连接结果,但我认为这不是一个好的解决方案。 grep 或任何其他可用于像 awk
这样的输出管道命令以获得上面的输出吗?
grep
而不是 确实是一个理想的工具,除了搜索您期望的文本之外,还可以执行其他操作。单独使用awk
!
awk '/Network address/{ ip = $NF } /Network mask \(bits\)/{ print ip "/" $NF}'
Awk 以 /pattern/ { action }
语法处理记录。因此,当第一个模式匹配时,提取由 space $NF
分隔的最后一个字段,即 Awk 用于存储由 space 分隔的最后一列的值的特殊变量(请参阅 7.5.1 Built-in Variables That Control awk)
当第二个模式以类似的方式匹配时,将最后一个字段与存储在 ip
变量中的值连接起来。 +
只是连接各个字符串以产生所需的结果。