2009-06-10 30 views
4

bashスクリプトを使用してファイルから最初の2文字を読み取る方法を知っている人はいますか?問題のファイルは実際にはI/Oドライバであり、新しい行の文字はなく、無限に長くなります。bashを使用してテキストファイルから文字を読み取る

+2

これは、プログラミングの質問ですが、私はあなたがServerfault.comに速い応答を得るかもしれないと思います。それらの人たちはスクリプト作成を知っています。 –

答えて

10

read組み込みが-nパラメータをサポートしています。

$ echo "Two chars" | while read -n 2 i; do echo $i; done 
Tw 
o 
ch 
ar 
s 

$ cat /proc/your_driver | (read -n 2 i; echo $i;) 
+1

ちょうど私が後にしたこと - ありがとう! –

+0

は、最初の2バイトのうちの1つが$ IFSにあれば動作しないかもしれません.ddは –

+0

を実行しますが、私が知る限り、それを行うための他のBASH方法はありません。 –

1

G'day、

なぜ必要なスライスを得るためにodを使用しないのですか?

od --read-bytes=2 my_driver 

編集:あなたがstdoutにheadコマンドプリントとして、このために頭を使うことはできません。最初の2つの文字が印刷可能でない場合は、何も表示されません。

odコマンドには、必要に応じてバイトをフォーマットするオプションがいくつかあります。

+1

またはhead --bytes = 2 my_driver –

+0

これらのソートは多くのシステムで動作しますが、ヘッドやodがインストールされていない組み込みシステムを使用しています。 –

+0

頭はありませんが、読むためのすべてのオプションはありますか?私の埋め込みenvは逆です:) そして、私はしばしば私が構築する組み込みシステムにddを入れます – shodanex

4

私は dd if=your_file ibs=2 count=1

はstraceのでそれを見てトリックを行うだろうと思い、それが効果的にファイルから読み込んだ2つのバイトをやっていることを示します。ここで では、/ dev /ゼロからの読み取り例であり、ゼロを表示するにはHDにパイプ:

dd if=/dev/zero bs=2 count=1 | hd 
1+0 enregistrements lus 
1+0 enregistrements écrits 
2 octets (2 B) copiés, 2,8497e-05 s, 70,2 kB/s 
00000000 00 00            |..| 
00000002 
+0

はい、これはバイナリの-nよりも堅牢です(特にIFS内のバイトの場合)。 V = 'dd if =/dev/whatever bs = 2 count = 1 2>/dev/null' –

関連する問題