출력에서 숫자만 가져오는 명령

출력에서 숫자만 가져오는 명령

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또한 원격 시스템이 아닌 로컬 시스템에서 globbing 패턴을 확장하므로 잘못된 결과가 나올 수 있습니다.

따라서 귀하의 명령은 다음과 같이 다시 작성되어야 합니다.

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이는 각 줄의 시작 부분과 그 뒤의 문자열 과 일치합니다 . 일치하는 문자열을 삭제하고 줄의 나머지 부분을 인쇄합니다. 다른 모든 데이터는 삭제됩니다.

관련 정보