Se eu usar cat -n text.txt
para numerar automaticamente as linhas, como usar o comando para mostrar apenas determinadas linhas numeradas.
tail
+ head
Também pode fazer isso, como podeawk
Se eu usar cat -n text.txt
para numerar automaticamente as linhas, como usar o comando para mostrar apenas determinadas linhas numeradas.
tail
+ head
Também pode fazer isso, como podeawk
Respostas:
Usar sed
Uso
$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Para imprimir uma linha (5)
$ sed -n 5p file
Line 5
Para imprimir várias linhas (5 e 8)
$ sed -n -e 5p -e 8p file
Line 5
Line 8
Para imprimir um intervalo específico (5 - 8)
$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8
Para imprimir o intervalo com outra linha específica (5 - 8 e 10)
$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10
Uma maneira de fazer isso é usando sed
:
cat -n text.txt | sed '11d'
onde 11 é o número da linha que você deseja remover.
Ou para remover todos, exceto 11:
cat -n text.txt | sed '11!d'
Também são possíveis intervalos:
cat -n text.txt | sed '9,12!d'
E cat -n
nem é necessário:
sed '9,12!d' text.txt
Dependendo dos objetivos, gosto de head ou grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
retornará as linhas 41 a 50.
ou
cat /var/log/syslog -n | grep " 50" -b10 -a10
mostrará as linhas de 40 a 60. O problema com o método grep é que você precisa usar a conta para preencher os números das linhas (observe o espaço)
Ambos são bastante úteis para analisar arquivos de log.
cat
Porém, nenhum dos exemplos precisa
cat
não pode fazer o que o OP quer
Como outros lhe mostraram, não há necessidade de usar cat -n
. Outros programas farão isso por você. Se, no entanto, você realmente precisar analisar a saída cat -n
e mostrar apenas linhas específicas (por exemplo, 4-8, 12 e 42), poderá:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
4 Line 4
5 Line 5
6 Line 6
7 Line 7
8 Line 8
12 Line 12
42 Line 42
Em awk
, $1
é o primeiro campo, portanto, este comando imprime todas as linhas cujos primeiros campos são i) entre 4 e 8 (inclusive) ou ii) 12 ou iii) 42.
Se você também deseja remover o campo adicionado por cat -n
para obter as linhas originais do arquivo, você pode:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42