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'は出力を1行ずつ処理し、 '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
行に文字が含まれている場合は、その行を印刷します。