출력에서 숫자만 추출하는 명령

출력에서 숫자만 추출하는 명령

SSH를 통해 원격 장치에 접속하고 패킷 손실 카운터를 가져옵니다.

$ ssh [email protected] cat /proc/net/pf_ring/*eth0* | grep -E "Tot Pkt Lost" 

위 명령의 출력:

Tot Pkt Lost       : 1083761951

Tot Pkt 누락된 숫자만 추출하는 명령이 필요합니다.

답변1

GNU가 있다면 grep다음과 같이 할 수 있습니다:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    grep -oP 'Tot Pkt Lost\s*:\s*\K\d+'
1083761951

하지만 awk아마도 더 간단하고 이식성이 뛰어난 것이 있을 것입니다.

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    awk '/Tot Pkt Lost/{print $NF}'
1083761951

답변2

이 경우 확장 정규식을 사용하지 않으므로 -Ewith를 사용할 필요가 없습니다. grep원격 시스템 대신 로컬 시스템에서 와일드카드 모드를 확장할 수도 있으며, 이로 인해 잘못된 결과가 발생할 수 있습니다.

따라서 명령을 다음과 같이 다시 작성해야 합니다.

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost'

여기서는 정규식이 아닌 문자열을 일치시키기 때문에 -Fwith를 사용하고 있습니다. grep또한 와일드카드 패턴이 로컬이 아닌 원격 호스트에서 확장되도록 원격 호스트에서 실행해야 하는 명령을 인용했습니다.

그러면 동일한 출력이 제공됩니다.

Tot Pkt Lost       : 1083761951

번호만 얻으려면 다음을 전달하세요 grep -E -o '[[:digit:]]+'.

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost' |
grep -E -o '[[:digit:]]+'

또는 다음을 사용하십시오 sed.

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
sed -n 's/^Tot Pkt Lost.*: //p'

Tot Pkt Lost이는 각 줄의 시작 부분과 그 뒤에 오는 문자열 과 일치합니다 . 일치하는 문자열을 제거하고 나머지 줄을 인쇄합니다. 다른 모든 데이터는 삭제됩니다.

관련 정보