Si je cat -n text.txt
numérote automatiquement les lignes, comment puis-je utiliser la commande pour afficher uniquement certaines lignes numérotées.
tail
+ head
peut également le faire, comme le peutawk
Si je cat -n text.txt
numérote automatiquement les lignes, comment puis-je utiliser la commande pour afficher uniquement certaines lignes numérotées.
tail
+ head
peut également le faire, comme le peutawk
Réponses:
Utilisation sed
Usage
$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Pour imprimer une ligne (5)
$ sed -n 5p file
Line 5
Pour imprimer plusieurs lignes (5 et 8)
$ sed -n -e 5p -e 8p file
Line 5
Line 8
Pour imprimer une plage spécifique (5 - 8)
$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8
Pour imprimer une plage avec une autre ligne spécifique (5 - 8 & 10)
$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10
Une façon de le faire est d'utiliser sed
:
cat -n text.txt | sed '11d'
où 11 est le numéro de la ligne à supprimer.
Ou pour supprimer tout sauf 11:
cat -n text.txt | sed '11!d'
Les gammes sont également possibles:
cat -n text.txt | sed '9,12!d'
Et cat -n
n'est même pas nécessaire:
sed '9,12!d' text.txt
En fonction des objectifs, j'aime bien la tête ou le grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
retournera les lignes 41 à 50.
ou
cat /var/log/syslog -n | grep " 50" -b10 -a10
montrera les lignes 40 à 60. Le problème avec la méthode grep est que vous devez utiliser un compte pour le remplissage des numéros de ligne (notez l'espace)
Les deux sont assez pratiques pour analyser les fichiers journaux.
cat
cependant besoin
cat
ne peut pas faire ce que l'OP veut
Comme d’autres l’ont montré, il n’est pas nécessaire d’utiliser cat -n
. D'autres programmes le feront pour vous. Si, toutefois, vous avez vraiment besoin d'analyser le résultat cat -n
et de ne montrer que des lignes spécifiques (par exemple, 4-8, 12 et 42), vous pouvez effectuer les opérations suivantes:
$ 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
Dans awk
, $1
le premier champ, de sorte que cette commande imprime toutes les lignes dont les premiers champs sont i) entre 4 et 8 (inclus) ou ii) 12 ou iii) 42.
Si vous souhaitez également supprimer le champ ajouté par cat -n
pour obtenir les lignes d'origine du fichier, vous pouvez procéder comme suit:
$ 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