web-dev-qa-db-ja.com

ファイル内の位置に文字を表示する

コマンドラインのみを使用して、指定された位置に文字を印刷したいと思います。例えば。:

<command> 5

そのファイルの5番目の文字がaの場合、aを出力します。

私は大きなファイルを扱っているので、理想的にはこれで大きなファイルを処理できるでしょう。

11
testTester

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
4
cuonglm

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を処理するために使用されました)

2
JJoao