grep

grep

/proc/net/dev공백으로 구분된 두 번째 열과 10번째 열의 콘텐츠를 추출 해야 합니다 . 즉, 수신 및 전송된 바이트 수입니다.

grep역참조를 사용하여 이를 수행할 수 있습니까 ?

답변1

귀하의 질문에 대답하십시오 :

awk '{print $2,$10}' /proc/net/dev

생산하다

Receive
|bytes packets
6385384218 42314607745
12034420041 12034420041

이것은 당신이 원하는 것이 아닐 수도 있습니다.

당신은 그것을 사용할 수 있습니다

awk '$1 ~ /:/ {print $2,$10}' dev
6385389751 42314610935
12034420241 12034420241

어디

  • $1 ~ /:/첫 번째 필드가 foo인 행을 선택합니다.
  • {print $2,$10}두 번째 및 열 번째 필드 인쇄

grep

  1. grep을 사용하면 정규 표현식과 일치하여 숫자를 선택할 수 있습니다./proc/dev/net
  2. 그러나 정규식은 설명은 하지만 실행할 수는 없습니다.

즉, 다음에 적용된 정규식이 표시되지 않습니다.단일 grep 명령그러면 전송됩니다

  eth0: 6385654376 26986310    0 107680    0     0          0      4665 42314947519 21475282    0    0    0     0       0          0
    lo: 12034424441 4553238    0    0    0     0          0         0 12034424441 4553238    0    0    0     0       0          0

(부정확한 숫자)

6385389751 42314610935
12034420241 12034420241

사용grep FOO

여기에는 FOOgrep의 옵션과 매개변수만 포함되어 있습니다.

@Emeric의 시도에서 내 OS에서 실행하면 두 개의 열이 있을 수 있습니다.

6385672702
42314983073
12034425441
12034425441

그러나 행운을 시험해 볼 수 있습니다.https://codegolf.stackexchange.com/

답변2

그게 전부라면 grep다음을 시도해 보세요.

grep -Eo '[^ ]+:( *[0-9]*){9}' /proc/net/dev | grep -Eo '(: *[0-9]*|[0-9]*$)' | grep -o '[0-9]*'
137517672
9029195
  • 첫 번째 표현식은 인터페이스 이름 + 콜론을 인쇄한 다음 다음 9개의 숫자 세트를 인쇄합니다.
  • 두 번째 표현식은 콜론으로 시작하거나 줄 끝(첫 번째 및 마지막으로 선택한 열)으로 끝나는 숫자 그룹만 추출합니다. 여기서 행은 일치하는 각 열에 대해 하나의 행으로 분할됩니다.
  • 마지막 표현식에는 선행 콜론이 제거되었습니다(여기에는 정치적인 내용이 없습니다.).

앞서 지적했듯이 grep이는 이 목표를 달성하는 최선의 방법과는 거리가 멀습니다.

관련 정보