Como recupero apenas a linha necessária da saída do terminal?

16

Quero receber apenas a terceira linha de df -h output.

Que tipo de comando devo usar?

    
por emrecnl 14.06.2016 / 15:37

7 respostas

31

Isso produzirá a terceira linha, independentemente do conteúdo.

df -h | sed -n 3p
    
por bc2946088 14.06.2016 / 15:41
16

O comando df na verdade aceita um argumento identificando o sistema de arquivos desejado. Então você poderia usar, por exemplo, df /home ou df /dev/sda3 .

Se você pretende analisar a saída de um script, convém usar df -P para garantir que ele nunca se encadeie em várias linhas. Então, por exemplo, você poderia usar df -Ph /home | tail -n +2 (mas se você está analisando a saída de um script, esteja ciente da possibilidade de nomes de arquivos com espaços neles)

    
por Random832 14.06.2016 / 18:05
14

Você pode usar uma combinação de head e tail :

df -h | head -3 | tail -1

Ou

df -h | tail -n +3 | head -1

Mas observe que, df permite filtrar a saída das opções de df , você deve verificar essas opções antes de usar qualquer comando externo.

Verifique man df .

    
por heemayl 14.06.2016 / 15:43
10

Awk é uma ferramenta de processamento de texto, por isso é apropriado para esta tarefa

df -h | awk 'NR == 3'
    
por Sergiy Kolodyazhnyy 14.06.2016 / 15:47
6

Suponho que você não esteja necessariamente procurando pela terceira linha, mas pela linha que menciona um disco específico (por exemplo, /dev/sda3 ) ou um ponto de montagem específico (por exemplo, /home ).

Então, em vez de apenas exibir a terceira linha, que é insegura porque a ordem de saída pode mudar e você pode obter um resultado diferente, é possível filtrar a saída pelo conteúdo e mostrar apenas as linhas que correspondem a um padrão específico ou que contêm uma palavra-chave .

Sua ferramenta para isso é grep .

Por exemplo, se você quiser a linha sobre o dispositivo /dev/sda3 , digite:

df -h | grep '/dev/sda3'

Se você quiser que a linha mencionando seu diretório pessoal como ponto de montagem, use:

df -h | grep '/home'
    
por Byte Commander 14.06.2016 / 15:50
6

Você também pode usar perl :

df -h | perl -ne 'print if $.==3' 

O $. é o número da linha atual, então você pode imprimir a enésima linha com perl -ne 'print if $.==N' .

    
por terdon 14.06.2016 / 15:54
2

Minha primeira ideia seria uma construção de cabeça-cauda.

Exemplo:

df -h | head -3 | tail -1

head -3 faz a saída parar após três linhas e tail -1 produzirá apenas a última linha.

Como alternativa, se você souber como será a aparência, você também poderá usar grep para localizar linhas que contenham uma determinada string.

    
por Wayne_Yux 14.06.2016 / 15:43