- 1 名前:名無しさん@お腹いっぱい。 [04/05/28 16:56]
- sedスレッド
- 333 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/29(月) 22:40:10 ]
- 白兵戦になるぞ!
- 334 名前:名無しさん@お腹いっぱい。 [2009/07/03(金) 03:11:56 ]
- sedで、
/pattern/r file ってするとマッチした行の次にfileの内容が出力されますが、 その行の前に出力する方法はないでしょうか? ちなみにマッチする行は1個しかありません。
- 335 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/03(金) 23:31:09 ]
- sed -n -e '/pattern/r file' -e p
- 336 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/03(金) 23:49:16 ]
- ごめん、ダメだった。こっちで。
sed -n -e 'x;p;g' -e '/pattern/r file' 1行目の空行は無視して
- 337 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/03(金) 23:53:59 ]
- 1行めの空白はもう1段 | sed 1d で消せるけど……
入力の最後の1行出てなくない?
- 338 名前:336 mailto:sage [2009/07/04(土) 00:17:53 ]
- 出てなかった。
sed -n -e 'x;p;g' -e '/pattern/r file' -e '$p' という感じで最後の行を出力することは出来るけど patternが最後の行の場合だけ、fileの内容が次行に出ちゃう。 自分はギブアップ
- 339 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/04(土) 12:34:06 ]
- いろいろありがとうございます。
sed 1個では難しいようですね。 patternより前とpattern以後に別けて、 間にfileをcatするしかないのかもしれません。
- 340 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/04(土) 18:04:47 ]
- sed 2個ならなんとか
sed -e '$aEND' | sed -e ' $d /pattern/{ r file N } ${ P d }'
- 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 ]
- なるほど
|

|