#!/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"