Is er een "canonieke" manier om dat te doen? Ik'heb head -n | tail -1
gebruikt wat de truc doet, maar ik'heb me afgevraagd of er'een Bash gereedschap is dat specifiek een regel (of een reeks regels) uit een bestand haalt.
Met "canonical" bedoel ik een programma waarvan de hoofdfunctie is om dat te doen.
head
en pipe met tail
zal traag zijn voor een enorm bestand. Ik zou sed
als volgt voorstellen:
sed 'NUMq;d' file
Waar NUM
het nummer is van de regel die je wilt afdrukken; dus, bijvoorbeeld, sed '10q;d' file
om de 10e regel van file
af te drukken.
Uitleg:
NUMq
zal onmiddellijk stoppen als het regelnummer NUM
is.
d
verwijdert de regel in plaats van deze af te drukken; dit wordt verhinderd op de laatste regel omdat de q
ervoor zorgt dat de rest van het script wordt overgeslagen bij het stoppen.
Als je NUM
in een variabele hebt, zul je dubbele aanhalingstekens willen gebruiken in plaats van enkele:
sed "${NUM}q;d" file
sed -n '2p' < file.txt
zal 2e regel afdrukken
sed -n '2011p' < file.txt
2011e regel
sed -n '10,33p' < file.txt
regel 10 tot regel 33
sed -n '1p;3p' < file.txt
1ste en 3de regel
en zo verder...
Voor het toevoegen van regels met sed, kun je dit controleren:
U kunt hiervoor ook Perl gebruiken:
perl -wnl -e '$.== NUM && print && exit;' some.file