4

コマンドラインから次の形式でネットワーク インターフェイスのリストを取得しようとしています。

"wlan0","eth0","lo"

特別な注文でそれらを取得する必要はありません。

私がすることができます:

wlan0,eth0,lo

この非常に最適化されていないコマンドを使用して、多くの検索を行った後、限界に達したと思った後:

ifconfig -a | grep -E '' | sed -n 's/^\([^ ]\+\).*/\1/p' | tr -d '\n' | sed s/:/,/g | sed 's/.$//' 
4

7 に答える 7

4

これを山に追加します。最初の sed に引用符を追加してから、ペーストで行を結合します。

ifconfig -a | sed -n 's/^\([^ ]\+\).*/"\1"/p' | paste -sd ","

末尾のコンマがないため、これは tr よりも優れています。

さらに良いことに、 ifconfig -a の出力は一貫性を保つために実際には当てにできないため、 /sys/class/net を確認してください

ls /sys/class/net | sed -e 's/^\(.*\)$/"\1"/' | paste -sd ","
于 2012-10-04T19:53:21.427 に答える
3

どうですか:

ifconfig -a | sed -e '/^ /d;/^$/d;s/\([^ ]*\) .*/"\1"/' | tr '\n' ','

実行するコマンドは次の 3 つです。

  1. /^ /dこのコマンドは、行がスペースで始まるかどうかをチェックします。存在する場合、「d」はそれを削除します (残りのコマンドを実行せずに次の行に移動します)。
  2. /^$/dこのコマンドは空行を削除します
  3. s/\([^ ]*\) .*/"\1"/このコマンドは、上記のコマンドが失敗したときに到達します (つまり、空はなく、スペースで始まらない行がある場合)。できる限りスペースではない文字をキャプチャし、スペースから行末までのすべての文字に一致させます。置換文字列に\1は、キャプチャされた文字列 (つまり、インターフェース名) を含む特別な「変数」が含まれます。また、引用符の間に含めます。

sed コマンドの後、二重引用符の間にインターフェイスがありますが、1 行に 1 つです。これを修正するためtr '\n' ','に、改行文字をコンマに置き換えるために使用します。

これが役立つことを願っています=)

于 2012-10-04T19:47:03.457 に答える
2
ifconfig -a | awk '/^[^[[:space:]]/{a[NR]=$1} END{count=asort(a,b);for(i=1;i<count;i++){printf "\"%s\",", b[i]}; printf "\"%s\"\n", b[count]}'
于 2012-10-04T19:51:09.393 に答える
2

Perlシェル内で:

ifconfig |
perl -ane '
    END{print "\042", join("\042,\042", @a), "\042\n"}
    $a[$c++] = $1 if /^(\w+)/; 
'

を使用する場合は、次のことを試してくださいbash

x=( $(ifconfig | grep -o '^[[:alnum:]]\+') )

for ((i=0; i<${#x[@]} -1; i++)); do
    printf '"%s",' ${x[i]}
done

printf '"%s"\n' ${x[-1]}

Tom McClure one に基づいていますが、 ls を解析していません:

printf '"%s"\n' $(
    printf '%s\n' /sys/class/net/* | cut -d '/' -f 5
) | paste -sd ","
于 2012-10-04T20:01:56.013 に答える
1

GNU findと を使用した一方向/sys/class/net/:

find /sys/class/net/ ! -type d -printf "\"%f\"," | sed 's/,$/\n/'

一方向の解析ifconfig -a:

ifconfig -a | sed -ne '/^[^ ]/ { s/^\([^ ]\+\).*/"\1"/; H }' -e '$ { g; s/\n//; s/\n/,/g; p }'
于 2012-10-05T01:01:25.277 に答える
1

/sysファイルシステムに対応するノードがある場合は、それを解析する方が良いかもしれませんが、試してみてください

ifconfig -a |
awk '/^[^ ]/ { printf ("%s\"%s\"", s, $1); s="," }'

インターフェイス名フィールドの末尾にコロンがある場合は、awk -F:.

于 2012-10-04T19:54:37.160 に答える
1

インターフェースのリストだけが必要な場合は、これでうまくいくはずです:

echo $(ifconfig | sed -n '/^[[:alnum:]]*:/s/:.*//p')

アイテム間にコンマが本当に必要な場合は、次のパイプを追加できます。

| sed 's/ /,/g'

二重引用符とコンマが本当に必要な場合は、次のパイプを追加できます。

| sed -e 's/ /","/g' -e 's/.*/"&"/'
于 2017-01-02T05:11:21.503 に答える