Você poderia fazer algo assim:
sed -e :a -e '$q;N;11,$D;ba'
Eu tenho um mini-sistema com apenas um número limitado de binários ( bash
, cp
, cat
, sed
, ...). Eu não tenho o comando tail
, e estou querendo saber se eu poderia emular a funcionalidade da cauda com sed
cat foo.txt | tail -n 10
Eu sei que posso imprimir as linhas 1-10 com sed cat foo.txt | sed -n '1,10p'
, mas como eu imprimiria as últimas 10 linhas?
tac foo | sed -n '1,10p' | tac
mas se você não tiver o tac, você pode usar somente sed dessa forma:
sed -n '1!G;h;$p' foo | sed -n '1,10p' | sed -n '1!G;h;$p'
expr
está disponível no seu sistema? Então você pode tentar avaliar o número da linha desejada depois de contar o número total de linhas no arquivo.
Eu criei um arquivo chamado tmp
contendo os números de 1 a 20 em cada linha.
nlines=$(cat tmp | sed -n '$=')
cat tmp | sed -n $(expr $nlines - 9),"$nlines"p
11
12
13
14
15
16
17
18
19
20
Claro, você pode usar wc -l
, se disponível.
O comando para calcular o número total de linhas no arquivo é retirado de sed one liners . No entanto, eu não verifiquei se funciona com arquivos vazios também.
P.S. Se expr
não estiver disponível, você pode usar subtrair números no Bash conforme mostrado abaixo:
cat tmp | sed -n $((nlines-9)),"$nlines"p