Que tal uma solução grep pura?
df -k | grep var | grep -o '[0-9]*%'
Você pode juntar esses dois greps com uma pequena ajuda de regexp perl:
df -k | grep -Po 'var.* \K[0-9]*%'
no meu script bash eu quero imprimir a capacidade de uso da partição / var do comando df -k
Eu faço o seguinte
df -k | grep var | awk '{print $5}'
o problema é que, às vezes, o número "use%" existe no campo quatro e, às vezes, no quinto e às vezes em outro campo, como seis ou mais
, por isso quero corresponder ao NUMBER% da partição var
por favor conselho como combinar o uso% number of var partition (maneira elegante)
Obrigado
exemplo1
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
exemplo2
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
Você pode usar uma expressão regular para corresponder ao número%:
df -k | grep -E ' /run$' | grep -Eo '[0-9]+%'
Alguma explicação.
df -k
Auto-explicativo: mostra a tabela livre de disco
grep -E '/ var $'
Use o mecanismo regexp estendido com grep
para corresponder ao /var
mountponit
A expressão regular /var$
ancora o padrão ao final da linha, portanto, não corresponde a /var/run
, /var/tmp
, o que seria um grep var
simples. Observe também o espaço antes da barra.
grep -Eo '[0-9] +%'
-E
ativará a expressão regular PCRE no Grep -o
imprimirá apenas a string correspondente A expressão regular é bem simples:
[0-9]
corresponde a qualquer dígito +
significa corresponderá a pelo menos um dígito %
corresponderá a %
char Exemplo de saída:
$ df -k | grep -E ' /var$' | grep -Eo '[0-9]+%'
1%
Boa parte é que não importa em qual posição o Use% é.
Se o seu grep suportar expressões regulares PCRE (o Mac OSX não, por exemplo), você pode usar um único regexp:
df -h | grep -Po '[0-9]+%(?= /var$)'
Isso usa o regexp Perl e usa o "look behind" para ancorar no padrão /var$
e corresponder ao regexp.
Se você está curioso, pode ler algo sobre esse recurso em este tutorial .
Veja a solução elegante que você precisa:
Se você quer apenas o / var, então
df --output=pcent /var
Se você preferir usar o grep
df --output=source,pcent | grep var
Ou você pode usar o formato posix onde o quinto campo é sempre Use%
df -k --portability | grep var | awk '{print $5}'
Você pode usar:
.... | awk '{print $(NF-1)}'
Isso pode fazer com que o cabeçalho de df
output seja impresso se contiver o padrão grep
. Para evitar isso, você pode:
.... | awk '$(NF-1) ~ /%/'
De uma maneira mais geral, POSIXly, use a opção -P
de df :
df -P | .... | awk '{print $5}'