Comando de cauda invertida? [duplicado]

1
    

Esta pergunta já tem uma resposta aqui:

    

Basicamente, canalizar um comando ou bloco de texto para algo como: tail -n 3 (por exemplo), irá imprimir somente as últimas três linhas para stdout . Existe um método equivalente ou similar para fazer exatamente o inverso disso? Assim, neste exemplo, seria imprimir all mas as últimas três linhas em stdout .

    
por tjt263 30.01.2017 / 23:37

2 respostas

1

Baseado no comentário de @ don_crissti; Se você achou isso útil, por favor vote no comentário dele.

Se eu tiver o arquivo a contendo:

1
2
3
4
5
6
7
8
9
10

e quero obter todas , mas as últimas três linhas , posso executar head -n -3 para produzir o seguinte:

# head -n -3 a
1
2
3
4
5
6
7
    
por 30.01.2017 / 23:47
0

Uma maneira de fazer isso pode ser algo assim (não muito elegante, mas testado e funciona):

a=$(wc -l <file.txt);a=$((a-3));sed ''$a'q;' file.txt

wc -l retorna o número das linhas do arquivo. O número das linhas agora é atribuído a um.

como queremos todas, exceto as últimas 3 linhas, estamos reduzindo ae, em seguida, usando sed para imprimir até a linha ath do arquivo.

    
por 31.01.2017 / 00:05