df -k 명령에서 숫자를 %와 일치시키는 방법

df -k 명령에서 숫자를 %와 일치시키는 방법

내 bash 스크립트에서 df -k 명령을 통해 /var 파티션의 사용 용량을 인쇄하고 싶습니다.

나는 다음을 수행합니다

     df -k | grep var | awk '{print $5}'

문제는 "use%" 숫자가 네 번째 필드에 존재할 때도 있고, 다섯 번째 필드에 존재할 때도 있고, 다른 필드에 6개 이상이 존재할 때도 있다는 점입니다.

그래서 맞춰보고 싶다숫자%var로 분할됨

var 파티션의 사용 % 수를 일치시키는 방법을 제안하십시오 (우아한 방법)

감사해요

실시예 1

df -k

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             13204256   4247972   8274728  34% /
/dev/sda5              5080796    141540   4677000   3% /tmp
/dev/sda2             14013128   7578564   5711240  58% /var
/dev/sda1               194442     40649    143754  23% /boot
tmpfs                  1037756         0   1037756   0% /dev/shm

실시예 2

 df -k

  Filesystem           1K-blocks      Used Available Use% Mounted on
  /dev/mapper/SysGroup-lv_root
                  18578172   2680752  14953704  16% /
  tmpfs                   510240         0    510240   0% /dev/shm
  /dev/sda1               198337     50064    138033  27% /boot
  /dev/mapper/SysGroup-lv_tmp
                   5160576    141464   4756968   3% /tmp
  /dev/mapper/SysGroup-lv_var
                  28899452   3481568  23949880  13% /var

답변1

순수한 grep 솔루션은 어떻습니까?

df -k | grep var | grep -o '[0-9]*%'

그런 다음 Perl 정규 표현식을 사용하여 이 두 grep을 연결할 수 있습니다.

df -k | grep -Po 'var.* \K[0-9]*%'

답변2

정규식을 사용하여 % 숫자를 일치시킬 수 있습니다.

df -k | grep -E ' /run$' | grep -Eo '[0-9]+%'

몇 가지 설명.

df -k
  • 설명이 필요함: 디스크 사용 가능 테이블을 표시합니다.

    grep -E '/var$'

  • 확장 정규식 엔진을 사용하여 mountponit grep일치/var

  • 정규식은 /var$패턴을 줄 끝에 고정하므로 어떤 것과도 일치하지 않습니다 /var/run. /var/tmp이는 간단한 grep var경우입니다. 또한 슬래시 앞의 공백에 유의하십시오.

    grep -Eo '[0-9]+%'

    • -EGrep에서 PCRE 정규 표현식이 활성화됩니다.
    • -o일치하는 문자열만 인쇄합니다.

정규식은 매우 간단합니다.

  • [0-9]임의의 숫자와 일치
  • + 적어도 하나의 숫자와 일치한다는 의미입니다.
  • %%문자 와 일치합니다

예제 출력:

$ df -k | grep -E ' /var$' | grep -Eo '[0-9]+%'
1%

좋은 점은 Use%가 어디에 있는지는 중요하지 않다는 것입니다.

grep이 PCRE 정규식을 지원하는 경우(예: Mac OSX는 지원하지 않음) 단일 정규식을 사용할 수 있습니다.

df -h | grep -Po '[0-9]+%(?= /var$)'

이는 Perl 정규식을 사용하고 "look-behind"를 사용하여 패턴을 고정 /var$하고 정규식과 일치시킵니다. 궁금하다면 이 기능에 대해 읽어보세요.이 튜토리얼.

답변3

다음은 귀하에게 필요한 우아한 솔루션입니다.

/var만 원한다면

df --output=pcent /var

grep을 사용하고 싶다면

df --output=source,pcent | grep var

또는 다섯 번째 필드가 항상 Use%인 posix 형식을 사용할 수 있습니다.

df -k --portability | grep var | awk '{print $5}'

답변4

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

.... | awk '{print $(NF-1)}'

출력 헤더에 패턴이 포함되어 있으면 df인쇄가 발생할 수 있습니다 grep. 이를 방지하려면 다음을 수행하세요.

.... | awk '$(NF-1) ~ /%/'

보다 일반적인 접근 방식인 POSIXly는 -P다음 옵션을 사용합니다.df:

df -P | .... | awk '{print $5}'

관련 정보