Você pode fazer a filtragem e a remoção com awk :
df -k | awk '/%/ && NR > 2 {print $5 " " $6}'
/%/ faz o mesmo trabalho que grep % .
NR > 2 filtra o rótulo e / linhas.
Eu tenho o comando abaixo para obter o uso do sistema de arquivos em um servidor:
df -k | awk '{print $5 " " $6}' | grep %
Quando executados, os seguintes são os resultados:
97% /
0% /proc
0% /etc/mnttab
0% /dev/fd
46% /var
1% /var/run
1% /tmp
54% /opt/app/oracle
22% /opt/app/proviso
Minha pergunta é: como posso fazer com que a linha contendo 97% / desapareça?
Você pode fazer a filtragem e a remoção com awk :
df -k | awk '/%/ && NR > 2 {print $5 " " $6}'
/%/ faz o mesmo trabalho que grep % .
NR > 2 filtra o rótulo e / linhas.
Você pode remover a primeira linha com a cauda:
df -k | awk '{print $5 " " $6}' | grep % | tail --lines +2
+2 significa que você deseja imprimir todas as linhas começando com a linha 2.
Você ficará bem até que df retorne algo assim:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-lv_root
367G 246G 103G 71% /
tmpfs 48G 0 48G 0% /dev/shm
Isso obviamente quebrou seu script / comando. Então, eu recomendo que você sempre aplique o comando -P ao comando df em seus scripts .
Em relação à sua questão inicial, eu faria isso com regex simples
df -Ph |awk '{if($6 ~ /^\/.+/) print $5, $6}'