誰かがバイナリファイルからいくつかのデータを読み取って、そのデータをシェルスクリプトなどの新しいバイナリファイルに書き込む方法を教えてください。私はLinuxを使用しています。
注:cat file1 > file2
データ全体を記録するので、必要ありません。
要件:一部のデータを読み書きし、再読み書きします。
while read -n1 ch
do
cat $ch > $output # Tried this, showing error. While writing the data after reading, cat command throws error : No such file or directory.
done < $filename
答え1
cat
制御に使用されるコマンドです。猫拡張により、enate ファイルは単一ファイルの内容を標準出力に印刷するためにも使用されます。それcat
がすることは、標準入力ストリームに入力されたファイルや何でもインポートして印刷するだけです。他の言語の文と同様に、引数を印刷しませんecho
。print
これは目的ではありません。
したがって、ここで作業に誤ったツールを使用しています。echo
最後に改行を追加して(通常はデフォルト)、何を入力しても印刷したいです。またはより良い、より安全特にバイナリデータの場合は、次のようにprintf
なります。
while read -r -n1 ch
do
printf '%s\n' "$ch" >> "$output"
done < "$filename"
バックスラッシュをエスケープ文字として解釈しないように指示します-r
。なぜなら、それ以降を使用すると、各反復で上書きされ、読み取った最後の文字と変数の周りの引用符だけが表示されるためです。read
>>
>
>
$output
シェルの分割+グローブ拡張から保護します。。