AIX:egrepを使用して一致するパターンを検索するには?

AIX:egrepを使用して一致するパターンを検索するには?

私は私の仕事を使用egrepまたは完了する方法を探しています。grep

各インターフェイスの最後の行を表示したいです。grepand withオプションを試してみましたegrepが、結果が予想したものとは異なりました。

#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

したがって、ツールは特定のパターンに一致する行を見つけて印刷することです。しかし、あなたの使命は、特定の行を見つけて印刷するのではなく、出力をカスタマイズすることです。

考えられる解決策の1つは、次のものを使用することです。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}'

関連情報