コマンドラインのみを使用して、指定された位置に文字を印刷したいと思います。例えば。:
<command> 5
そのファイルの5番目の文字がa
の場合、a
を出力します。
私は大きなファイルを扱っているので、理想的にはこれで大きなファイルを処理できるでしょう。
sed
の場合:
$ echo 12345 | sed 's/.\{4\}\(.\).*/\1/;q'
5
$ echo 1234ắ | sed 's/.\{4\}\(.\).*/\1/;q'
ắ
現在のロケールで入力に無効なマルチバイト文字が含まれている場合、sed
は出力の生成に失敗することに注意してください。シングルバイト文字のみを扱う場合は、LC_ALL=C
を使用できます。
ASCIIファイルを使用すると、dd
を使用することもできます。
$ echo 12345 | dd bs=1 skip=4 count=1 2>/dev/null
5
1から数えて5番目のバイトが必要な場合:
dd ibs=1 skip=4 count=1
または
tail -c +5 | head -c 1
tail
は1から数えるので、abcdefg
を含むファイルを指定すると、e
が出力されることに注意してください。
dd
およびtail -c
はPOSIXにあります。 head -c
は一般的ですが、POSIXにはありません。 GNU coreutils、BusyBox、FreeBSD、およびNetBSdにありますが、OpenBSDまたはSolarisにはありません。
または(gnu)grepを使用:
grep -zoP '.{4}\K.' file
(-z
は、5番目の文字の前に\n
を処理するために使用されました)