- 1 名前:名無しさん@お腹いっぱい。 [04/05/28 16:56]
- sedスレッド
- 341 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/24(木) 17:28:09 ]
- >>295 の例に似てますが、
バイナリファイル(1行めの)4バイトめを ASCII 文字 0x02 -> 0x03 に 変更するにはどうすればいいでしょう? # sed -e '1s/^\(...\)\x02/\1\x03/' in > out ではだめでした。 試した環境は FreeBSD 7.2 です。
- 342 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/24(木) 18:02:08 ]
- >>341
(dd bs=3 count=1; dd bs=1 count=1 of=/dev/null; printf '¥003'; cat) < in > out
- 343 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/25(金) 10:26:24 ]
- >>341
sed -e "1s/^\(...\)^B/\1$(printf '\03')/" でできんかね。^BはC-v C-b入力できるはず。
- 344 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/25(金) 10:46:05 ]
- >>343
最初の3バイトに改行文字がない保証がないから一般的にはだめそうだな。 やっぱ行指向のsedでバイナリファイルを操作するのは無理があると思う。
- 345 名前:341 mailto:sage [2009/09/25(金) 12:31:36 ]
- \x02 などは GNU sed の拡張仕様でした。
# pkg_add -r gsed # rehash # gsed -e '1s/^\(...\)\x02/\1\x03/' in > out でできました。
- 346 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/25(金) 12:37:49 ]
- >>342-344 ありがとうございます。
>>342 の dd を使った方法は大変参考になります。 あと、 # sed -e '1s/^\(...\)^V^B/\1^V^C/' in > out でもできました。 ^V^B は <Ctrl>V<Ctrl>B 、 ^V^C は <Ctrl>V<Ctrl>C です。
- 347 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/20(土) 21:42:41 ]
- ひとつ、お聞きいたします。
Nコマンドって、最後の行で次行が読めない場合、何もせず終了、 のはずですよね。すると、 sed 'sed ':l;N;bl' <file> とすると何も出力されないんじゃないかと思うんですが、 私の使っているGNU sed 4.1.5版だと<file>の全部を出力してしまいます。 つまり、「何もせず終了」じゃなくて、「デフォルト出力して終了」 になっているように思われるわけですが、これは、どうなんでしょうか。
- 348 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/20(土) 23:16:51 ]
- >>347
infoに書いてありました。
- 349 名前:名無しさん@お腹いっぱい。 [2010/07/01(木) 23:39:24 ]
- なるほど
|

|