Eu usaria uma abordagem um pouco mais sofisticada do que simples grep
:
-
awk
df -h | awk 'NR==1 || /^\/dev/'
NR
é o número da linha atual, portanto o scriptawk
acima 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
-p
imprimirá 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. -
sed
df -h | sed -n '1p; /^\/dev/p'
O
-n
suprime a saída normal, portanto, nenhuma linha é impressa. O1p
significa imprimir a primeira linha e o/^\/dev/p
significa 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'
-
grep
df -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
df
versão fornecerá um caminho na primeira linha, portanto, pesquisar por linhas que não contenham/
também deve funcionar:df -h | grep -E '^[^/]*$|^/dev'