文字列"で始まる項目の数を計算したいと思います。トゥエン「コマンド出力を取得しましたifconfig
。
たとえば、これが私の出力であれば、数が2になることを望みます。を試してみましたが、grep
まだ解決策はありません。
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.0.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:16:73:86:ba txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s31f6: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:00:00:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xa1300000-a1320000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 :: prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 905 bytes 80293 (80.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 905 bytes 80293 (80.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 00.00.00.00 netmask 255.255.255.255 destination 192.168.105.77
inet6 :: prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 438 bytes 52174 (52.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 457 bytes 33911 (33.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 0.0.0.0 netmask 255.255.255.255 destination 192.168.104.61
inet6 :: prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 584 (584.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
答え1
grep
とを組み合わせて使用するwc
か、次のものを使用できます。awk
最初の方法、使用grep
:
ifconfig | grep "^tun" | wc -l
これは、grepを介して出力をパイプし、ifconfig
文字列で始まるすべての行を一致させてからtun
(これは「アンカー」インジケータを使用して実行されます)、出力で一致する行を^
計算wc
するために使用されます。grep
指摘したとおり@schaibaを使用すると、一致するすべての行を自動的に計算するwc
オプションgrep
を使用せずにこれを実行できます。-c
ifconfig | grep -c "^tun"
2番目の方法、使用awk
:
ifconfig | awk 'BEGIN {tuns=0}; /^tun/ {tuns++}; END {print tuns}'
これにより出力がにパイプされますawk
。awk
一重引用符で囲まれたプログラムは、' ... '
次のことを行います。
- 最初()では、会計処理に使用する
BEGIN { ... }
内部変数を0に初期化します。tuns
- メインループで文字列
tun
(正規表現で表される/^tun/
)で始まる各行に対してカウンタをインクリメントします。tuns
- 入力が完了した後(
END { ... }
)は結果値を出力します。tuns
答え2
これは必要ないかもしれませifconfig
んip
。インターフェースは次の場所にリストされています/sys/class/net
。
% ls /sys/class/net
eth0 lo tun0 tun1 tun2 wlan0
したがって、次のようにディレクトリ数を計算できます。
$ printf "%s\n" /sys/class/net/tun* | wc -l
3