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

따라서 도구는 특정 패턴과 일치하는 라인을 찾아서 인쇄하는 것입니다. 그러나 당신의 임무는 특정 줄을 찾아서 인쇄하는 것이 아니라 출력을 사용자 정의하는 것입니다.

가능한 해결책 중 하나는 다음을 사용하는 것입니다.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}'

관련 정보