ファイル内の特定の場所に文字を表示

ファイル内の特定の場所に文字を表示

コマンドラインだけを使用して特定の場所の文字を印刷したいと思います。たとえば、

<command> 5

aファイルの5番目の文字が出力されたらa

私は大容量ファイルを扱っているので、理想的にはこれは大容量ファイルを処理できるはずです。

答え1

5番目のバイトが必要な場合は、1から世紀を始めてください。

dd ibs=1 skip=4 count=1

または

tail -c +5 | head -c 1

計算はtail1から始まるので、含まれているファイルが与えられるとabcdefg印刷されますe

ddそしてtail -cPOSIXで。head -c一般的ですが、POSIXにはありません。 GNU coreutils、BusyBox、FreeBSD、NetBSdにはありますが、OpenBSDやSolarisにはありません。

答え2

そして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

答え3

または(gnu)grepを使用してください。

grep -zoP '.{4}\K.'   file

(5番目の文字を-z処理する前に使用されます)\n

関連情報