Eu usaria uma abordagem um pouco mais sofisticada do que simples grep :
-
awkdf -h | awk 'NR==1 || /^\/dev/'NRé o número da linha atual, portanto o scriptawkacima será impresso se essa for a primeira linha ou se a linha atual começar com/dev. E depois de postar isso, vejo que é o mesmo que a resposta do @ 1_CR. Bem ... -
Perl
df -h | perl -ne 'print if (/^\/dev/ || $.==1)'A mesma ideia aqui, em Perl, a variável especial
$.é o número da linha atual. Um caminho alternativo seriadf -h | perl -pe '$_="" unless /^\/dev/ || $.==1'A opção
-pimprimirá todas as linhas do arquivo de entrada. O valor da linha atual é mantido em$_, portanto, definimos$_como vazio, a menos que desejemos a linha atual. -
seddf -h | sed -n '1p; /^\/dev/p'O
-nsuprime a saída normal, portanto, nenhuma linha é impressa. O1psignifica imprimir a primeira linha e o/^\/dev/psignifica imprimir qualquer linha que comece com/dev.Como apontado nos comentários abaixo, no caso improvável em que a localidade em seu sistema atual faz com que a linha de cabeçalho comece com
/dev, o comando acima irá imprimi-lo duas vezes. Stephane Chazelas pontos a> que este não terá esse problema:df -h | sed -e 1b -e '/^\/dev/!d' -
grepdf -h | grep -E '^(/dev|File)'Isso pode não ser portátil devido a problemas de LOCALE, como você disse. No entanto, estou razoavelmente certo de que nenhum código de idioma ou
dfversão fornecerá um caminho na primeira linha, portanto, pesquisar por linhas que não contenham/também deve funcionar:df -h | grep -E '^[^/]*$|^/dev'