Non, il n'y en a pas, les fichiers ne sont pas adressables en ligne.
Il n'y a pas de moyen en temps constant de trouver le début de la ligne n dans un fichier texte. Vous devez parcourir le fichier et compter les retours à la ligne.
Utilisez l'outil le plus simple/le plus rapide dont vous disposez pour faire le travail. Pour moi, en utilisant head
gagne beaucoup plus de sens que grep
, puisque ce dernier est beaucoup plus compliqué. Je ne dis pas "grep
est lent", ce n'est vraiment pas le cas, mais je serais surpris qu'il soit plus rapide que head
pour cette affaire. Ce serait un bogue dans head
, en gros.
avec GNU-grep, vous pourriez simplement dire
grep --context=10 ...
# print line number 52
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
méthode 3 efficace sur les gros fichiers
moyen le plus rapide d'afficher des lignes spécifiques
J'ai trouvé deux autres solutions si vous connaissez le numéro de ligne mais rien d'autre (pas de grep possible) :
En supposant que vous ayez besoin des lignes 20 à 40,
sed -n '20,40p;41q' file_name
ou
awk 'FNR>=20 && FNR<=40' file_name
Lors de l'utilisation de sed
il est plus efficace de quitter le traitement après avoir imprimé la dernière ligne que de poursuivre le traitement jusqu'à la fin du fichier. Ceci est particulièrement important dans le cas de fichiers volumineux et de lignes d'impression au début. Pour ce faire, le sed
la commande ci-dessus introduit l'instruction 41q
afin d'arrêter le traitement après la ligne 41 car dans l'exemple nous ne nous intéressons qu'aux lignes 20-40. Vous devrez remplacer le 41 par la dernière ligne qui vous intéresse, plus un.