Centos 7 서버에 이더넷 인터페이스를 표시해야 합니다. Centos 6.5에서는 (다른 게시물의) 이 명령을 사용했는데 6.5에서는 제대로 작동했습니다.
ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo
Centos 7에서는 이제 인터페이스 출력에 ":"가 붙습니다.
그래서 내 출력은 다음과 같습니다
ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo
ens32:
lo:
"lo:" 제거 이것을 수정했습니다. 결과는 ens32입니다.
ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo:
ens32:
끝에 있는 ":"을 어떻게 제거할 수 있나요? 이 sed를 수정할 수 있나요? 아니면 다른 아이디어
답변1
불행하게도 ifconfig 명령의 원시 출력을 제공하지 않았습니다. 하지만 나는 다음과 같은 일을 할 것입니다 :
$ ifconfig -a | perl -anle 'print $F[0] if /(^\w)/'
$ enp2s0f0
lo
tun0
wlp3s0b1
원본 출력은 다음과 같습니다.
enp2s0f0 Link encap:Ethernet HWaddr 3c:07:54:5f:5e:35
inet addr:192.168.1.114 Bcast:192.168.1.255
[...]
perl -anle, 여기서 'a'는 열의 줄을 분할하고 변수 $F를 채웁니다. 'n'은 출력을 한 줄씩 처리하고, 'l'은 각 인쇄 사이에 새 줄을 넣는 것이고, 'e'는 명령줄 Perl 명령을 실행합니다. 그런 다음 정규식에 따라 "^" 줄의 시작 부분에 "\w" 문자가 포함된 "//" 줄을 일치시키고 싶다고 말했습니다.
답변2
이는 콜론이 없는 이전 시스템에서 작동합니다.그리고콜론이 있는 새 시스템의 경우:
$ /sbin/ifconfig -a | awk -F'[ :]+' '$1 && $1!="lo" {print $1}'
eth0
또는 sed를 사용하세요. 이는 기존 시스템과 새 시스템에서도 작동합니다.
$ /sbin/ifconfig -a | sed -n 's/[ :].*//; /^lo$/t; /./p'
eth0
awk 또는 sed를 사용하는 경우 grep을 실행하기 위해 추가 프로세스가 거의 필요하지 않습니다.
awk 명령의 작동 방식
-F'[ :]+'
이는 awk에게 연속된 공백이나 콜론을 필드 구분 기호로 처리하도록 지시합니다.
$1 && $1!="lo" {print $1}
첫 번째 필드가 있고 이 필드가 없으면
lo
인쇄합니다.
sed 명령의 작동 방식
-n
이는 명시적으로 요청하지 않는 한 sed에게 아무것도 인쇄하지 않도록 지시합니다.
s/[ :].*//
이는 sed에게 첫 번째 공백이나 콜론부터 줄 끝까지 모든 것을 제거하라고 지시합니다.
/^lo$/t
행이 일치하면
lo
나머지 명령은 건너뛰고 다음 행에서 시작됩니다././p
줄에 문자가 포함되어 있으면 해당 줄을 인쇄합니다.