AIX:如何使用egrep搜索匹配模式?

AIX:如何使用egrep搜索匹配模式?

我正在寻找如何使用egrepgrep完成我的任务。

我想显示每个接口的最后一行。我尝试使用grepand egrepwith 选项,但结果没有达到我的预期。

#ifconfig -a

en0: flags=1e080863,480<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),CHAIN>
        inet 10.x.x.x netmask 0xffffff80 broadcast 10.x.x.x
         tcp_sendspace 16384 tcp_recvspace 16384 rfc1323 0
en1: flags=1e080863,480<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),CHAIN>
        inet 10.x.x.x netmask 0xfffffff0 broadcast 10.x.x.x
         tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
en2: flags=1e080863,480<UP,BROADCAST,10.x.x.xmask 0xffffff80 broadcast 10.x.x.x
         tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
lo0: flags=e08084b,c0<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,LARGESEND,CHAIN>
        inet 127.0.0.1 netmask 0xff000000 broadcast 10.x.x.x
        inet6 ::1%1/0
         tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1

预期输出:

en0: tcp_sendspace 16384 tcp_recvspace 16384 rfc1323 0
en1: tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
en2: tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
lo0: tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1

答案1

更新: 在 AIX 7 服务器上进行了测试,并根据 AIX 要求更新了命令。

来自手册grep:

grep, egrep, fgrep - print lines matching a pattern

所以该工具是查找并打印与某些模式匹配的行。但您的任务不是查找并打印某些行,而是自定义输出。

可能的解决方案之一是使用grep排除不需要的行,然后使用sed将输出所需部分格式化为请求的方式:

ifconfig -a |grep -Ev '^[[:space:]]*inet'|sed -e :a -e '$!N;s/:.*\n/: /g;s/[[:space:]][[:space:]]*/ /g'

输出:

en0: tcp_sendspace 16384 tcp_recvspace 16384 rfc1323 0
en1: tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
en2: tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
lo0: tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1

您也可以使用 awk (如评论中建议的那样)或其他工具或工具组合。

答案2

awk

ifconfig -a | awk '
  /^[^[:space:]]/ {iface = $1; next}
  $1 == "tcp_sendspace" {$1 = $1; print iface, $0}'

相关内容