Nếu bạn muốn bao gồm các dòng X đến Y (bắt đầu đánh số từ 1), hãy sử dụng
tail -n +$X /path/to/file | head -n $((Y-X+1))
tailsẽ đọc và loại bỏ các dòng X-1 đầu tiên (không có cách nào khác), sau đó đọc và in các dòng sau. headsẽ đọc và in số dòng yêu cầu, sau đó thoát. Khi headthoát, tailnhận tín hiệu SIGPIPE và chết, do đó, nó sẽ không đọc nhiều hơn giá trị của kích thước bộ đệm (thường là vài kilobyte) từ các tệp đầu vào.
Ngoài ra, như gorkypl đề xuất, hãy sử dụng sed:
sed -n -e "$X,$Y p" -e "$Y q" /path/to/file
Tuy nhiên, giải pháp sed chậm hơn đáng kể (ít nhất là đối với các tiện ích GNU và tiện ích Busybox; sed có thể cạnh tranh hơn nếu bạn trích xuất một phần lớn tệp trên HĐH nơi đường ống chậm và sed nhanh). Dưới đây là điểm chuẩn nhanh trong Linux; dữ liệu được tạo bởi seq 100000000 >/tmp/a, môi trường là Linux / amd64, /tmplà tmpfs và máy thì không hoạt động và không trao đổi.
real  user  sys    command
 0.47  0.32  0.12  </tmp/a tail -n +50000001 | head -n 10 #GNU
 0.86  0.64  0.21  </tmp/a tail -n +50000001 | head -n 10 #BusyBox
 3.57  3.41  0.14  sed -n -e '50000000,50000010 p' -e '50000010q' /tmp/a #GNU
11.91 11.68  0.14  sed -n -e '50000000,50000010 p' -e '50000010q' /tmp/a #BusyBox
 1.04  0.60  0.46  </tmp/a tail -n +50000001 | head -n 40000001 >/dev/null #GNU
 7.12  6.58  0.55  </tmp/a tail -n +50000001 | head -n 40000001 >/dev/null #BusyBox
 9.95  9.54  0.28  sed -n -e '50000000,90000000 p' -e '90000000q' /tmp/a >/dev/null #GNU
23.76 23.13  0.31  sed -n -e '50000000,90000000 p' -e '90000000q' /tmp/a >/dev/null #BusyBox
Nếu bạn biết phạm vi byte bạn muốn làm việc, bạn có thể trích xuất nó nhanh hơn bằng cách bỏ qua trực tiếp đến vị trí bắt đầu. Nhưng đối với các dòng, bạn phải đọc từ đầu và đếm dòng mới. Để trích xuất các khối từ x bao gồm đến y độc quyền bắt đầu từ 0, với kích thước khối là b:
dd bs=$b seek=$x count=$((y-x)) </path/to/file