#!/bin/sh
set -eu
usage() {
cat <<-'EOF'
Usage:
lines START [END]
lines -h
EOF
}
help() {
cat <<-'EOF'
Options:
-h, --help show this message
START the nth line number to start showing
END the nth line number to stop
showing (default: START + 1)
Print the range START-END of lines of the content of STDIN.
Examples:
Print 3rd line:
$ seq 10 | lines 3
3
Print lines 5~8:
$ lines 5 8 < file.txt
EOF
}
for flag in "$@"; do
case "$flag" in
(--)
break
;;
(--help)
usage
help
exit
;;
(*)
;;
esac
done
while getopts 'h' flag; do
case "$flag" in
(h)
usage
help
exit
;;
(*)
usage >&2
exit 2
;;
esac
done
shift $((OPTIND - 1))
START="${1:-}"
if [ -z "${2:-}" ]; then
END=1
else
END=$(($2 - START + 1))
fi
eval "$(assert-arg -- "$START" 'START')"
tail -n +"$START" | head -n "$END"