문자열 "로 시작하는 항목 수를 계산하고 싶습니다.투엔"명령 출력을 얻었습니다 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"
두 번째 방법, 사용 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