[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/11 15:25 / Filesize : 82 KB / Number-of Response : 350
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

sed



1 名前:名無しさん@お腹いっぱい。 [04/05/28 16:56]
sedスレッド

307 名前:名無しさん@お腹いっぱい。 [2008/10/27(月) 23:08:07 ]
ファイル内の、スペース+改行をスペースのみに置換したいのですが、
どのように記述すればよいのでしょうか。

データ数が数十万行あるため、ファイルを全部読み込んでから
置換する方法では、容量がオーバーしてしまいました。

308 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/27(月) 23:26:18 ]
>>307
Perl か何かで書いちゃった方が早いんじゃね?

309 名前:名無しさん@お腹いっぱい。 [2008/10/27(月) 23:29:29 ]
>>308
環境上、Perlを使用することができないんです。
sedでは難しいでしょうか。

310 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/28(火) 00:02:57 ]
環境によって違うと思うけど普通の書き方じゃダメなのか?

s/ \n/ /g

311 名前:名無しさん@お腹いっぱい。 [2008/10/28(火) 00:07:58 ]
>>310
自分の環境では、\nが認識されませんでした。

312 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/28(火) 02:53:50 ]
>>311
OSの具体的な名前とかは出さないのな。

s/\
/ /g

では?


313 名前:312 mailto:sage [2008/10/28(火) 02:56:53 ]
すまん。勘違いした。

sed はPerlと違って、入力したときに改行を取り除いてからパターンスペースに送るから、
そこで改行探しても見つかりっこない。
んで、出力時に自動的に改行は付くし、これを抑制する手段はない。

せめて awk使っとけ。Perlなくてもawkはあるだろ。


314 名前:312 mailto:sage [2008/10/28(火) 02:58:41 ]
すまん勘違いしてた。

sedはPerlと違って入力時に改行を取り除くから、置換時に改行探したって見つかりっこない。
Nとかで次の入力を読んでくれば間に挟まるけど。



315 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/28(火) 03:19:55 ]
おまえらマルチに親切だな



316 名前:名無しさん@お腹いっぱい。 [2008/10/28(火) 07:09:08 ]
ありがとうございました。
sedでは難しそうですね。別の方法を探してみます。

317 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/28(火) 07:21:00 ]
微妙に変えてあるとこがうまいな。

318 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/28(火) 22:44:37 ]
tr -d '\n'

319 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/28(火) 22:47:24 ]
良く読んで赤面しろw

>>318
>>307
「スペース+改行をスペースのみに置換したい」

320 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/28(火) 22:54:10 ]
>>307

sed '
:again
/ $/{
N
s/?n//
b again
}
'

321 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/16(月) 16:23:57 ]
sedの公式ホームページってないのでしょうか
awkは一応gawkがあって一応開発も続いているようですが
sedはどのような状態なのでしょうか?
いつまでたっても最短マッチを搭載しない理由もお教えねがいます。

322 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/16(月) 23:57:10 ]
そういう機能を追加すると、既存のスクリプトが動作しなくなるから。
ポータビリティを失ってまで実装する必要がない。(それこそ、perlでもawkでも使えばいい)

323 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/17(火) 09:03:12 ]
なるほど、参考になりました。
もし開発に参加できるなら参加したいと思っていたのですが
そのような理由ならそういったときはperlやawkに頼る事にします。

324 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/18(水) 09:33:00 ]
>>322
sedに正規表現perl互換モードを搭載すればいいだけなのにね

325 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/19(木) 18:21:24 ]
GNU sedの-r みたいなので、perlモードがあればいいね。



326 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/19(木) 19:39:12 ]
>>321
gnu sed 拡張している人たちがいるからそのあたりに乗ってみれば?

327 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/19(木) 20:18:08 ]
onigsedじゃダメなのか?

つーか、perl -pe でいいじゃん。


328 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/24(火) 17:21:46 ]
>>321
GNU sed なら
www.gnu.org/software/sed/

329 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/27(金) 16:21:29 ]
>>327
今度はsed互換ではないという

330 名前:名無しさん@お腹いっぱい。 [2009/06/29(月) 20:49:52 ]
質問させてください。
sedでホワイトスペースを解除または増やす方法ってあるのでしょうか?

331 名前:名無しさん@お腹いっぱい。 [2009/06/29(月) 20:52:21 ]
間違い。ホールドスペースです。

332 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/29(月) 21:16:24 ]
以下ホワイトベース禁止

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 ]
なるほど






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<82KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef