Câu trả lời:
Với sed
:
$ echo 12345 | sed 's/.\{4\}\(.\).*/\1/;q'
5
$ echo 1234ắ | sed 's/.\{4\}\(.\).*/\1/;q'
ắ
Lưu ý rằng sed
sẽ không tạo ra đầu ra nếu đầu vào của bạn chứa các ký tự nhiều byte không hợp lệ trong ngôn ngữ hiện tại. Bạn có thể sử dụng LC_ALL=C
nếu bạn chỉ làm việc với các ký tự byte đơn.
Với tệp ASCII, bạn cũng có thể sử dụng dd
:
$ echo 12345 | dd bs=1 skip=4 count=1 2>/dev/null
5
sed 's/.\{4\}\(.\).*/\1/;q' file
Nếu bạn muốn byte thứ 5, đếm từ 1:
dd ibs=1 skip=4 count=1
hoặc là
tail -c +5 | head -c 1
Lưu ý rằng tail
tính từ 1, do đó, đưa ra một tệp có chứa abcdefg
, bản in này e
.
dd
và tail -c
đang ở POSIX. head -c
là phổ biến, nhưng không có trong POSIX; nó có trong GNU coreutils, BusyBox, FreeBSD và NetBSd và không có trong OpenBSD hoặc Solaris.
cat file | tail -c +5 | head -c 1