[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2ch.scのread.cgiへ]
Update time : 10/31 04:49 / Filesize : 140 KB / Number-of Response : 607
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

sed



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

350 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/08/17(火) 13:08:10 .net]
yコマンドで"/"を対象に入れたいんですが出来ないんでしょうか
初歩的ですいません

351 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/08/17(火) 13:23:28 .net]
>>350
sed y,abc,ABC,

とかできるから、

sed 'y,ab/,ab%,'

もできる。

352 名前:350 mailto:sage [2010/08/17(火) 23:26:44 .net]
そうか、区切り文字変えられるのsコマンドばかりじゃないんですね。
どうもありがとうございました。

353 名前:初心者 [2010/10/23(土) 20:01:51 .net]
sedでシェルすくりぷとの行つなぎバックスラッシューを消して、繋ぐことできますか?
perlなら-pe "s/\\\n//g"でできます。
edでも、awkでもできれば、教えていただけませんか?

354 名前:名無しさん@お腹いっぱい。 [2010/10/24(日) 13:40:00 .net]
できる

355 名前:初心者 mailto:sage [2010/10/24(日) 21:13:33 .net]
できました ありがとう

356 名前:初心者 [2010/10/25(月) 22:07:05 .net]
できないようですね、残念です。

357 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/10/26(火) 19:38:19 .net]
sed -e ':lbl' -e '/[^\\]$/b' -e 's/\\$//' -e N -e 's/\n//' -e 'b lbl'

置換パターンに\nを許さない場合は
sed -e ':lbl' -e '/[^\\]$/b' -e 's/\\$//' -e N -e 's/
//' -e 'b lbl'

358 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/10/28(木) 08:37:34 .net]
踊っているように見えて仕方がない
echo "000000$NUM" | sed -e 's/.*\(..\)\(..\)\(..\)/\1\2\3/'




359 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/11/28(日) 18:33:17 .net]
sedでファイルのある部分までをファイル1、それ以降をファイル2に出力ってスマートにできませんか?
例えば100行のsample.txtというファイルで、

sed -e "50q" < sample.txt > sample1.txt
sed -e "1,50d" < sample.txt > sample2.txt

の様にするのは無駄におもえてしまいます。

360 名前:名無しさん@お腹いっぱい。 [2010/11/28(日) 18:39:52 .net]
sed -ne '1,50w sample1.txt' -e '51,$w sample2.txt' < sample.txt
とか?


361 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/11/28(日) 18:48:58 .net]
split -50 sample.txt; mv xaa sample1.txt; mv xab sample2.txt

362 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/11/28(日) 19:52:27 .net]
>>360,361
ありがとうございました。勉強になります。

363 名前:名無しさん@お腹いっぱい。 [2010/12/22(水) 23:54:50 .net]
入力テキストを

1行目の内容 2行目の内容
2行目の内容 3行目の内容
:
最終-2行目の内容 最終-1行の内容
最終-1行目の内容 最終行の内容

という形(隣り合った行の値を空白で連結する)に変換するにはどう書けば
よいでしょうか。
sed -ne '1!p;$!p'
と通せば先頭末尾以外の行を2回出力できたので、
これを2行分ずつくっつければ出来そうなのですが…


364 名前:名無しさん@お腹いっぱい。 [2010/12/23(木) 00:03:02 .net]
¥n ってどのsedでも使えるんだっけ?

$ seq 1 10 | sed -ne '1!p;$!p' | sed 'N;s/¥n/ /'
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10


365 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/12/23(木) 00:47:03 .net]
seq 1 10 | sed -ne '1h;1!{H;x;s/\n/ /;p}'

366 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/12/26(日) 21:44:54 .net]
s/seq/jot/

367 名前:名無しさん@お腹いっぱい。 [2011/01/15(土) 11:45:22 .net]
unixの基礎概念という本の中に
a 21
is 10
this 3
というtest.txtファイルに対して、
sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt
とすると結果は
21 a
10 is
3 this
になると書いてありましたが、実行してみると並びはかわりませんでした。

368 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 11:49:07 .net]
>>367
確かに。それじゃぁ一番左側の .* が、最長一致で行全体に一致しちゃうから、
並びが変わらなくて正解。

悪書の書名晒して。



369 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 11:50:52 .net]
久野さんらしくないミスだな。

確かに変わらないね。

370 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 11:51:32 .net]
>>367
真中の * の直前のスペース、
スペース2つじゃないの?

コピペするとスペースが1つとかになるので注意。

371 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 11:54:36 .net]
これかな? www.amazon.co.jp/dp/4756144772
久野先生の本だけど、そんなのが混ざってるのか。

372 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 12:01:42 .net]
>>371
はいそれです。解説にも
「これはどう読むかというと、『入力行を任意の文字列1と、空白のならび2と、また別の任意の文字列3
にマッチさせ、それ全体を3、2、1の順でつなげたものに置き換える』という意味になる。」と書いてあります。

373 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 12:06:04 .net]
>>372
なら、>>370の指摘通りで、キミが間違っている。
× sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt
○ sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt

374 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 12:10:21 .net]
2chに不慣れな感じ

375 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 12:11:56 .net]
專ブラなら安価ポップアップでちゃんと表示されるのかな

>>373

376 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 12:14:12 .net]
>>372
紙面上に、└┘└┘みたいな感じでスペースの個数は明示してあるの?
明示してないなら紙面が悪いと思うが。

377 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 12:36:36 .net]
>>373
空白2個ならいけるのですか。

>>376
そういう、└┘└┘みたいな感じはなかったです。文字数的にも一文字分の感じ
ですし。編集上のミスかもしれませんけど。

378 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 14:25:37 .net]
>>376
> 「これはどう読むかというと、『...、空白のならび2と、...
って書いてあるんだろ?




379 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 14:29:14 .net]
>>378
それは、¥2 のこと。「スペース2個」のことじゃないよ。

380 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 14:31:27 .net]
>>378 空白のならび


381 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 14:34:38 .net]
>>378
正規表現を理解してないバカ発見。

任意の文字列 → \1
空白の並び → \2
別の任意の文字列 → \3

と言ってるだけのこと。それとスペース2つ書くのとは意味が違う。

382 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/01/15(土) 14:44:12 .net]
むしろhtmlのレンダリングを理解していない

383 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/03/25(金) 20:16:28.23 .net]
任意の文字列の前か後ろの少なくともどちらかは、任意でない特定の文字・文字列(含^$)でないと困ったことになるということですね?
俺も前それで失敗した。

384 名前:名無しさん@お腹いっぱい。 [2011/04/21(木) 06:41:06.41 .net]
sedの話題はこっちへ
くれぐれもシェルスクリプトスレに書き込まないように!

385 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/04/21(木) 13:17:24.83 .net]
>>377
\2,\3がφで全体がマッチ
\1に行全体

一つ目が\([^ ]*\)ならよかった。

386 名前: 忍法帖【Lv=38,xxxPT】 【東電 69.2 %】 株価【E】 mailto:sage [2011/04/27(水) 08:53:07.51 .net]
AAA BBB=111 CCC=111

この行の111を000に置き換えするのに
sed -e 's/BBB=111/BBB=000/'
とする以外にもっとスマートな書式を教えてください。

GNU sedです

387 名前:名無しさん@お腹いっぱい。 [2011/04/27(水) 12:11:27.62 .net]
>>386
sed -e "s/1/0/g"

388 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/04/27(水) 12:35:36.38 .net]
>>386
> sed -e 's/BBB=111/BBB=000/'
これじゃ、お題
> この行の111を000に置き換えするのに
を満たさない。

矛盾を含む質問に答えることは不可能。



389 名前:386 mailto:sage [2011/04/27(水) 13:29:23.92 .net]
>この行の111を000に置き換えするのに
この行のBBB=111だけをBBB=000にする書式でした
すいません。

390 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/04/27(水) 13:52:24.65 .net]
スマートの基準がわからないけど、BBBが二度出現するのが嫌なら

sed -e 's/\(BBB\)=111/\1=000/'

391 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/04/27(水) 14:59:23.65 .net]
>>386
s/111 /000 / で十分


392 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/04/27(水) 16:29:55.08 .net]
AAA BBB=111 CCC=111 DDD=111 EEE=1111

393 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/04/27(水) 19:10:11.78 .net]
sed -e /BBB=/{'s/111/000/'}

シェルスクリプトスレで覚えたやり方

394 名前:名無しさん@お腹いっぱい。 [2011/05/18(水) 23:11:59.71 .net]
sed -e 's/<space><space>*/<space>/g' test.txt
って動かないんですが?

395 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/05/19(木) 09:49:48.72 .net]
動きますよ?

396 名前:名無しさん@お腹いっぱい。 [2011/05/19(木) 10:16:19.05 .net]
EUCだとうまく動作しないのだが、これはデフォルトなのかな

397 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/05/19(木) 10:19:25.96 .net]
EUCでも問題ないけど。

398 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/05/19(木) 17:40:32.75 .net]
そもそも、EUCはそういうツールで不都合がないようにということで作られたわけで。
日本語独特の文節や漢字などに対応しない、というのはあるけど。



399 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/05/19(木) 18:16:12.59 .net]
>>396
> うまく動作しない

How?


400 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/05/19(木) 18:31:23.35 .net]
<space> ってそのまま打ってるってオチだろw

401 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/05/19(木) 19:04:04.07 .net]
>400
そのとおりでした;すいません

402 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/05/19(木) 19:05:53.32 .net]
EUCじゃないファイルではうまくいってたのか?

403 名前:401 mailto:sage [2011/05/19(木) 20:27:32.13 .net]
>402 それは別人です

404 名前:401 mailto:sage [2011/05/30(月) 17:29:13.86 .net]
偽物ばかり
氏ね

405 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/09/09(金) 13:29:22.13 .net]
急に Windows 7 64 bit で ssed が使えなくなっま。

406 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/09/12(月) 17:43:29.52 .net]
で?

407 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/09/26(月) 15:16:39.67 .net]
xp モードで解決したわけですね

408 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 13:06:39.22 .net]
tab8のテキストをインデントを崩さずに半角スペースに置き換えるにはどうすればいいですか?



409 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 14:42:23.70 .net]
expand -8

410 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 14:49:05.34 .net]
sedで、じゃね。

411 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 14:57:37.44 .net]
エスパーすると質問者は手段はsedじゃなくても良いと考えてる

412 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 14:58:33.13 .net]
それならこのスレで聞かないでしょ。

413 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 15:01:50.53 .net]
sedでもできそうだと勘違いしたからでしょ

414 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 15:08:26.12 .net]
>>410
それなら「expand -8相当の処理をsedでやるには?」って聞くでしょ。

415 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 15:34:39.95 .net]
>>414
expand を知らなかった、という可能性は。

416 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 15:38:55.31 .net]
>>415
というかexpandを知らなかったからこそ
「tab8のテキストをインデントを崩さずに…」みたいな
まわりくどい言い方で聞いたんでしょ。
だからsedに関係なくexpandを回答すれば回答として十分。

417 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 15:49:38.28 .net]
>>408
そろそろ正解を。

418 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 15:50:50.14 .net]
>>416
expandを知らないけどsedを使わなければならない理由があるんだよ!



419 名前:408 mailto:sage [2011/11/30(水) 17:44:22.28 .net]
すっごく登場しにくくなったけど>>415さんが正解です。

>>409
エスパーさんありがとう。

皆さん混乱させてスイマセンでした。置き換えと言えばsedしか知らなかったので。

420 名前:名無しさん@お腹いっぱい。 [2012/04/06(金) 20:12:58.82 .net]
文字列unkoの行を見つけてから文字列chinkoの行まで表示
ってどうやればいいの?

421 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/06(金) 20:38:54.03 .net]
>>420
当たり前過ぎるから回答は控えるけど、
エスパーすると -n オプション忘れて全部の行が表示されてしまったってオチだろな

422 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/06(金) 23:35:46.08 .net]
そんなことなくてその当たり前すぎる内容がわからない初心者さんなんでしょう。
回答してあげないなんてひどいね

423 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/07(土) 07:37:37.99 .net]
>>421
あ、-n だけのことだったんですね。失礼しました。

>>422
そこまで初心者じゃないです。

424 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/07(土) 08:46:29.91 .net]
自己申告乙

425 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/08(日) 06:16:06.93 .net]
初心者の土瓶口だけど、chinkoの前の行まで表示 ってのはできるの?

426 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/08(日) 06:20:31.95 .net]
>>425
/start/,/end/{/end/!p}

427 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/08(日) 08:34:53.99 .net]
>>426
いや、それは知ってるよ。
そういうことせずに直接○○の行の手前まで指定はできないのか聞いてるんだが

428 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/08(日) 16:24:07.33 .net]
unkoの次の行から、ってのは難しいのかな・・・



429 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/08(日) 16:42:05.75 .net]
>>428
startを含まず、endを含む場合
sed -n '1,/start/b; 1,/end/p'

430 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/09(月) 11:14:30.69 .net]
みんな1行野郎なの? スクリプトファイルは書かないの?

431 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/10(火) 11:14:22.67 .net]
>>430
スクリプト書くほどならperlで書いちゃう

432 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/11(水) 03:53:49.91 .net]
perlは英語のマニュアルが読めなくて挫折した。あんときperlがんばっとけばよかったorz

433 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/11(水) 08:09:32.29 .net]
書くよ

434 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/13(金) 05:52:55.50 .net]
DTPでテキストの整形するとき、いっぱい痴漢(←なぜか第一候補)するよ。

435 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/04/13(金) 18:41:21.71 .net]
>>432
俺はPerlは書籍で覚えたな、ラクダとあと何かUnixツールとして使うための本

436 名前:名無しさん@お腹いっぱい。 [2012/08/06(月) 23:45:58.92 .net]
教えてください!
テキストファイルの最後にある空行を削除するにはどうすればいいですか?
$ sed -n ' 105,$p' Ga.inp
search.LowerE -3.000 # default=-3.000 (Hartree)
search.UpperE 20.000 # default=20.000 (Hartree)
num.of.partition 1200 # default=300
matching.point.ratio 0.67 # default=0.67











の様に、最後に無駄な空行のあるファイルがたくさんあって、一括削除したいのです。
ただし、途中にある改行は、ファイルの見やすさのために残しておきたいのです。
ed で言えば
$;?^.?;+,$d
で出来ると思うのですが、sed では';'や'+'が使えず、どうしてよいやら・・・


437 名前:名無しさん@お腹いっぱい。 [2012/08/07(火) 00:42:37.55 .net]
パターンスペースが
空行だったらホールドスペースに追加
空行でなかったらホールドスペースを出力後にパターンスペース出力

最後の連続空行はホールドスペースに収まったままで終わる。

とか考えてみたがあってるだろうか。


438 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/07(火) 03:04:20.52 .net]
Nコマンドを使っていて必要な最期の行を全部すっとばしたことが、私にもありました



439 名前:名無しさん@お腹いっぱい。 [2012/08/07(火) 22:00:53.40 .net]
>>437
多分やりたいのはそれだと思います。
具体的に同書けばいいのでしょう?


440 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/08(水) 02:01:32.99 .net]
もうawkかなにかで済ましてるだろうけど練習
437とは違うやり方になった
sed -n -e '
:loop
/^\n*$/{
N
b loop
}
p
'

441 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/08(水) 21:26:58.20 .net]
>>440
ありがとうございます!
うまくいきました。


442 名前:名無しさん@お腹いっぱい。 [2012/08/17(金) 16:05:21.04 .net]
gsedですが、
ブラケット開きがあって、ブラケット閉じ以外のものが1つ以上あって、ブラケット閉じがある場合、
で、これどこがおかしいのでしょうか? ★☆が現れてくれないんですけど。
s/\[\([^\]][^\]]*\)]/[★\1☆]/g

443 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/17(金) 16:29:03.18 .net]
>>442
バックスラッシュが余計

sed 's/\[\([^]][^]]*\)]/[★\1☆]/g'

444 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/17(金) 16:43:13.83 .net]
ありがとうございます。
つまり、[ と ] の間にあるものはどんなものでも
「これは文字です」と宣言しなくてもいい(\が要らない)ということですか。
やってみます。ありがとうございました。

445 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/17(金) 16:45:03.71 .net]
>>444
そうなんだけど、] の場合は、[^ の直後にある場合のみ
普通の文字の ] とみなすという仕様。( [ の直後でも同様)

446 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/17(金) 18:35:40.56 .net]
テキスト   [aaa], [bbb] <あああ>の(アアア)と<いいい>の(イイイ)
欲しい結果 ★aaa☆, ★bbb☆ ★あああ☆の★アアア☆と★いいい☆の★イイイ☆
s/[<[(]\([^<>[]()][^<>[]()]*\)[>])]/★\1☆/g
予想はしたけど、まるで反応してくれません。
半角の約物3種類は欲張ったかなあ、と1つずつやってみているところです。

447 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/17(金) 18:37:54.56 .net]
>>446
>>445 に書いてあること読めよ。

[^ の直後に ] を置かないと、普通の文字としては認識されないんだよ。
[^....] の中の .... の順番を変えろということ。

448 名前:名無しさん@お腹いっぱい。 [2012/08/17(金) 18:41:47.66 .net]
>>446
s/[[<(]\([^]<>()][^]<>()]*\)[]>)]/★\1☆/g



449 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/18(土) 03:20:55.76 .net]
>>447-448
ああ、すみません。言葉が足りませんでした。読んだ上でわざと変えてみたのです。

450 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/19(日) 00:04:02.62 .net]
え?


451 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/08/20(月) 16:08:01.31 .net]
ごめんなさい。>>446は[]の中の[]に全部\を付けたつもりでした(このミスが大元ですね)

エスケープすればどの位置にあっても文字とするというsedを使っていたのと、
最長一致の正規表現も使っていたので混乱してしまいました。
「直後」を何度も言われていたのに、「直後『だけ』」に思いが至りませんでした。

452 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/10/25(木) 06:00:58.34 .net]
gsed で、置換コマンドの s を間違えて a と入力したスクリプトを実行したら、
一行ごとにその行が挿入されていて笑ってしまった。
a コマンドなんて知らなかったわ。

453 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/10/25(木) 06:04:10.00 .net]
笑えんなぁ。

454 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/10/25(木) 06:09:46.09 .net]
笑って許して♪

455 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/10/25(木) 06:45:25.34 .net]
gsed って置換するときにタグの数が合ってなくてもエラーが出ないのね。

456 名前:名無しさん@お腹いっぱい。 [2012/10/25(木) 23:53:29.32 .net]
aなんて、edの基本じゃん!


457 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/10/27(土) 12:38:13.67 .net]
マニュアルでも最初のほうに来ちゃうしね

458 名前:名無しさん@お腹いっぱい。 [2012/11/05(月) 10:24:08.04 .net]
質問があります

テキストファイルaaaの中身

<hoge>
abc
</hoge>

<hoge>
def
</hoge>

これを

<hoge>
def
</hoge>

のようにabcのタグだけ削除したい

sed -i "/^<hoge>\n abc\n<\/hoge>/d" aaa

これでは削除できませんでした。
改行を含む文字列を削除する場合どうしたらいいでしょうか?



459 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/05(月) 10:26:48.87 .net]
sedでやるのは無理があるんじゃないか。

460 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/05(月) 12:39:56.92 .net]
>>459
いや、なせば成る

461 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/05(月) 13:24:25.09 .net]
cat aaa | sed -e ':loop; N; N; !b loop; s/^<hoge>\n abc\n<\/hoge>//'
これで良いのかな?

462 名前:名無しさん@お腹いっぱい。 [2012/11/05(月) 14:31:53.41 .net]
>>459-461
ありがとうございます
しかし削除できませんでした
ちなみにsedじゃなくて何でやったほうがいいでしょうか?

463 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/05(月) 14:34:20.66 .net]
Perl でも Ruby でも何でもいいよ。

464 名前:名無しさん@お腹いっぱい。 [2012/11/05(月) 14:56:37.97 .net]
>>463
はい。ありがとうございます。できればシェルスクリプトで書きたいので
PerlでもRubyでも何でもいいとは思いますがそれ以外でいいコマンドはありませんでしょうか?

465 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/05(月) 15:19:40.83 .net]
grep -n abc して、出てきた数字でsedスクリプト作っちゃうとか。

466 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/05(月) 15:53:27.99 .net]
>>464
シェルスクリプトから呼び出せば良いんじゃないの?
sedだって所詮は外部コマンドだし。

467 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/05(月) 21:31:52.30 .net]
>>482
sed -n -f hoge.sed <aaa

hoge.sed:

/<hoge>/b hoge
p
b end

:hoge
N
N
/<hoge>\n abc\n<\/hoge>/!p
:end


468 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/06(火) 04:00:03.51 .net]
>>458
aaaがXMLならXMLパーサ(を使える言語)を使った方がいいと思う
/<hoge>/!b
:loop
$b last
/<\/hoge>/!{
N
b loop
}
:last
s/<hoge>[ \n\t]*abc[ \n\t]*\(<\/hoge>\)*//g



469 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 09:09:15.11 .net]
すみません。教えて下さい。
テキストの最終行のあとに空白行を1行入れる、というのはどう書くのでしょうか。
iコマンドでは最終行の前に空白行ができてしまいます。

470 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 09:23:56.98 .net]
sed -e '$a\
hoge
'

471 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/20(火) 09:30:53.76 .net]
ありがとう。助かりました。

472 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/22(木) 01:22:12.85 .net]
最終行の後なら

$ cat >> tmp

$
で十分であるようにも思うけどなぁ

473 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/22(木) 03:29:10.92 .net]
ああ、なるほど。いつか思い出して使うこともあるでしょう。ありがとう。

474 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/22(木) 07:19:23.18 .net]
>>472
1行追加ならechoの方が楽でね?

475 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/11/22(木) 11:59:50.11 .net]
そうなんだけど、sedファイルの中に書き込みたかったんですよ。でも、ありがと

476 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/04(金) 10:51:16.73 .net]
optimized sed
www.commandlinefu.com/commands/view/11707/optimized-sed
巨大ファイル対象の場合は
sed '/foo/ s/foo/foobar/g' <filename>

sed 's/foo/foobar/g' <filename>
よりも効率がよいとの事ですが、どういう原理でそうなるんでしょうか

477 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/04(金) 12:52:49.06 .net]
"foo"の在る行だけを対象にするから?
どのみち見つけに行くんだから同じじゃん?と想ったり想わなかったり

478 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/04(金) 12:55:13.46 .net]
>>476
100万行のテキストファイル、GNU版のsedで試してみたけど
どっちも変わらなかったぞ



479 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/05(土) 01:12:15.15 .net]
つまり、都市伝説って事か
どのsedかによっても違うんだろう

480 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/01/05(土) 09:49:03.44 .net]
対象になる行の割合にもよるんじゃないの?

481 名前:478 mailto:sage [2013/01/05(土) 10:26:37.21 .net]
1億行、954MBのファイルでやってみた

$ seq -w 100000000 > large.txt
$ sed --version | head -1
sed (GNU sed) 4.2.2
$ grep '111' large.txt | wc -l
549739

$ for i in {1..3}; do time sed 's/111/999/g' large.txt > /dev/null; done
sed 's/111/999/g' large.txt > /dev/null 28.68s user 0.77s system 80% cpu 36.731 total
sed 's/111/999/g' large.txt > /dev/null 28.75s user 0.68s system 82% cpu 35.666 total
sed 's/111/999/g' large.txt > /dev/null 27.99s user 0.61s system 81% cpu 35.067 total

$ for i in {1..3}; do time sed '/111/ s/111/999/g' large.txt > /dev/null; done
sed '/111/ s/111/999/g' large.txt > /dev/null 27.68s user 0.63s system 82% cpu 34.418 total
sed '/111/ s/111/999/g' large.txt > /dev/null 27.96s user 0.72s system 57% cpu 49.912 total
sed '/111/ s/111/999/g' large.txt > /dev/null 28.84s user 0.71s system 81% cpu 36.287 total

482 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/04/08(月) 00:25:48.59 .net]
>type diff
diff is /usr/bin/diff
> type diff | sed 's,[()],,g;s,^[^/][^/]*,,;q'
/usr/bin/diff
s,[()],,g;s,^[^/][^/]*,,;q'
ってどう解釈すれば良いんですか?

483 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/04/08(月) 05:56:57.86 .net]
人それぞれ
で良いんじゃない

484 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/05/21(火) 06:44:35.71 .net]
Macでgsedを使っています。やりたいこと
★のある行と☆のある行の間にある行のうち、ひらかなを含む行の行頭に@を付ける。
(ひらかなが1文字でも入っていれば良い)

/★/,/☆/{
/[あ-ん]/s/^/@/
}

無視されてしまうんです。助けてください。

485 名前:484 mailto:sage [2013/05/21(火) 08:34:08.57 .net]
[あ-ん]がいけなかったみたいです。[あいうえお(中略)ん、。]でできました。

486 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/05/21(火) 13:23:01.78 .net]
あ-ん♪

487 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/05/21(火) 16:08:58.36 .net]
>>484
ぽーつ使ってるならssed入れてpcre環境にすれば\p{Hiragana}とか
できるんじゃね

488 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/05/22(水) 03:36:42.23 .net]
ごめんワカンナイ



489 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/05/22(水) 16:53:09.99 .net]
ssedって次期GNU sedのこと。
GNUのページでもこの拡張には依存するなって書いてる。
ただ、macでBSD系のsedじゃなくGNU sed使ってるんなら
port依存って意味ではあんまり変わんないんじゃない?

490 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/03/04(火) 03:45:38.92 .net]
>>334
横から&亀だが

sed '/pattern/ {
'"`sed 's/^/i\\\\\n/' <file`"'
}'

491 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/06/28(土) 14:33:09.63 .net]
>>491
UNIX板で答えない方が良いのかもしれませんが、適当なスレが無さそうなので
windows のコマンドプロンプトで実行しているとして答えます。

cmd.exe の仕様が原因と思われる
sed -e "s/^/ "^""/" hoge.txt > hoge2.txt

492 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/06/28(土) 14:56:57.91 .net]
sedを使用する際の注意事項があります。
コンピュータのCPUが何ビットであるか調ベておく事が大切です。

32ビットCPUを搭載したコンピュータには、
32ビット用のsedをインストールすること。

64ビットCPUを搭載したコンピュータには、
64ビット用のsedをインストールすること。

これを間違えれば正常にsedが動作しません。

493 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/20(水) 00:07:25.20 .net]
sedの使い方がわからず、試行錯誤しているのですが、うまくいきません。
行の先頭に特定の文字列(たとえば"abc")があったらその行を丸ごと"xxxxxxxxxxx"に置換するにはどうすれば良いでしょうか。

例:
abc123456

xxxxxxxxxxx
に変換さえるイメージです。

494 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/20(水) 01:37:59.80 .net]
>>493
sed -n /^abc/p
sed s/^abc.*$/xxxxxxxxxxx/

495 名前:名無しさん@お腹いっぱい。 [2014/08/20(水) 01:39:49.69 .net]
パイプで使うバージョンを書く
|sed 's/^abc.*/xxxxxxxxxxx/'

496 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/20(水) 02:29:51.22 .net]
sed '/^abc/cxxxxxxxxxxx'

497 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/20(水) 03:06:02.58 .net]
abc -> xxx
abc123 -> xxxxxx
abc12345 -> xxxxxxxx
をsedでやるならどう書くんだろ

498 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/20(水) 06:22:02.63 .net]
>>497
s/./x/g



499 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/08/20(水) 10:13:13.33 .net]
>>493
sed '/^abc/s/./x/g'
かな?

500 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/09/17(水) 02:37:37.33 .net]
パスワードのゼロ埋め(ゼロパディング)と見た。

501 名前:名無しさん@お腹いっぱい。 [2014/10/21(火) 08:56:25.00 .net]
バックスラッシュって読みやすいか?日本語だと使い道無いし。

プログラミングで正規表現書いてると、
s/\dhoge\sfuga\s/hoge/
↑似たような記号ばっかりで読みづらいw

s/¥dhoge¥sfuga¥s/hoge/
↑こっちのほうが読みやすい

502 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/10/21(火) 10:00:39.43 .net]
使い道ある記号だったらエスケープシーケンスにも
円記号ねじ込むにも適さなかっただろうよ

503 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/10/21(火) 11:48:25.80 .net]
最近可愛く見えてきた。意味を持たない組み合わせに腹を立てたり。

504 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/10/21(火) 13:00:32.47 .net]
スラッシュとバックスラッシュが紛らわしいんならスラッシュ以外の
文字を区切りに使えばいいんでないの?

505 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/10/21(火) 13:05:36.87 .net]
区切りを変更できるのはsコマンドとかの時だけ

506 名前:名無しさん@お腹いっぱい。 [2014/11/06(木) 07:19:05.88 .net]
1,/hoge/ のようにaddressに正規表現を使う時のスラッシュを
他の記号に変えることはできますか?
s@@https://@ のようなことをしたいのです

507 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/11/06(木) 08:27:36.11 .net]
>>505 にあるようにできない。

508 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/11/06(木) 08:42:54.81 .net]
できる実装もあるかもしれない



509 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/11/06(木) 09:21:40.14 .net]
コピペ改変にかまうな

510 名前:名無しさん@お腹いっぱい。 [2014/12/23(火) 16:27:26.38 .net]
他人が書いたコードで、例えば文字列が、
11 AAA [BBB] CCC/DDD.txt EEE FFF-01
だった場合に、ここから[]内の文字(BBB) を抜き出すために、
sed -e 's/\[//g' -e 's/\]//g' | awk '{ print $3 }'
というスクリプトで BBB を取得しています。

このスクリプトを変更して、DDD を取得したいのですが、
どう書けば良いのでしょうか?

511 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/12/23(火) 19:23:47.26 .net]
s,.*/,,; s,\.txt.*,,

512 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/12/24(水) 15:41:51.14 .net]
ありがとう

513 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/12/28(日) 06:55:35.52 .net]
>>506
1,\@hoge@

linuxで確認済み
検索でここにたどり着いた人の為と、何処のコピペか検索してもそれらしいものが出なかったので、貼っておきます

POSIX
sed
pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
In a context address, the construction "\cBREc", where c is any character other than <backslash> or <newline>, shall be identical to "/BRE/".
If the character designated by c appears following a <backslash>, then it shall be considered to be that literal character,
which shall not terminate the BRE. For example, in the context address "\xabc\xdefx", the second x stands for itself,
so that the BRE is "abcxdef".

BSD
On-line Manual of "sed"
www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=sed&dir=jpman-5.4.0%2Fman&sect=0
1. コンテキストアドレスにおいて、バックスラッシュ (``\'') と改行以外の 文字を正規表現の区切りとして用いることできます。
区切り文字の直前に バックスラッシュを置くことで、区切り文字をリテラルに解釈させることが できます。
たとえば、コンテキストアドレス \xabc\xdefx において、区切 り文字は ``x'' で、2つめの ``x'' は ``x'' という文字を表します。
よっ て、正規表現は ``abcxdef'' と解釈されます。

LINUX
Man page of SED
linuxjm.sourceforge.jp/html/GNU_sed/man1/sed.1.html
/regexp/
正規表現 regexp にマッチした行にマッチする。
\cregexpc
正規表現 regexp にマッチした行にマッチする。c には任意の文字を指定できる。

514 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/12/28(日) 17:04:08.20 .net]
おおお、グレート義太夫

515 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/10(水) 23:22:09.08 .net]
どうにも理解が出来ず教えて欲しいのですが
sed.sourceforge.net/sed1line.txt

から
# print paragraph if it contains AAA (blank lines separate paragraphs)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

これがどうにもわかりません。
H;$!d;の$!dが何故必要なのか?
動作の流れを教えて頂けないでしょうか?

516 名前:516 [2016/02/21(日) 00:09:27.85 .net]
age

517 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/21(日) 01:34:16.62 .net]
タダで教えろって?

518 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/21(日) 10:27:51.16 .net]
dがあるのは段落の区切りまで何も出力させないため

ファイル末尾も段落の区切りだから$!が要る
ファイル末尾に必ず空行があるなら$!は要らない

dでそのサイクルが終了することは知ってますね?



519 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/21(日) 10:54:53.96 .net]
10日も呆けーと待ってたことに驚き

520 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/21(日) 13:02:47.07 .net]
でも教えてもらえたじゃないかw

521 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/21(日) 14:02:51.01 .net]
自分で試せば小一時間で気付くのに、と思う

522 名前:516 mailto:sage [2016/02/21(日) 16:55:28.79 .net]
>>518
有り難うございます。助かりました。
!dをpの様に認識してしまっていて次のサイクルに移行させる
イメージがなく、$!dを最終行を表示させるとしか思ってなくて
色々試してもどうにも腑に落ちないもので質問させて頂きました。

523 名前:名無しさん@お腹いっぱい。 [2016/04/28(木) 22:19:31.31 .net]
sedで桁そろえってどうしたらいいですかる
具体的にはls -l で出てきた結果のうち、ファイル名を最初に左揃え、ファイルサイズを右揃えで出力したいのですが、
sedコマンドだけで可能ですか?

524 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/29(金) 06:51:34.85 .net]
そういうのは awk で。

525 名前:名無しさん@お腹いっぱい。 [2016/04/29(金) 07:15:23.81 .net]
どうしてもsedだけでやたいんです!
お願いします!

526 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/29(金) 07:58:13.44 .net]
UNIX哲学に戻るんだ。
1つのことをうまくやる、ものを組み合わせればいいんだから、まずはawkでやってみる。

527 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/29(金) 08:26:18.75 .net]
awkでもいいが、シェル内部コマンドだけでもできるぞ。

ls -l | while read m l u g s t1 t2 t3 f
do
printf

528 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/29(金) 08:29:01.55 .net]
ありゃ? 記号があると書き込みが切れる。記号を全角にした。半角に直して読んでね。

ls -l | while read m l u g s t1 t2 t3 f
do
printf ”%-20s %8d %s\n” ”$f” ”$s”
done



529 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/29(金) 09:51:04.97 .net]
FreeBSD$ stat -f %-20N%8z *

Linux$ stat -c %-20n%8s *

530 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/29(金) 10:02:30.45 .net]
sedでの右揃えは、一旦中身のみを切り出してから左側に余分なスペースを加えてから
右から文字数固定で切り取る。
左揃えはその逆。

531 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/11(木) 22:51:26.97 .net]
>>144の更新 NetBSDとOpenBSDの標準sedで-iが導入。
入力ファイルを書き換えるには?

・-i オプションをつかう
・-i オプションがないsedをつかっているなら in-place editing 対応の sed の導入を検討する
・ed を使うことを検討する
・perl を使うことを検討する
・一時ファイルを必要としないファイル命名法を検討する
www.idaemons.org/projects/inplace/  を使う
・(rm hoge.dat; sed 's/aaa/bbb/' > hoge.dat) < hoge.dat

FreeBSD の標準 sed に -i オプションが取り入れられたのは 4.7R でそれ以前には無い。
NetBSD の標準 sed に -i オプションが取り入れられたのは 7.0 でそれ以前には無い。
OpenBSDのの標準 sed に -i オプションが取り入れられたのは 5.8 でそれ以前には無い。
MacOSX の 標準 sed は FreeBSD 由来なので元になるバージョンに依存する。
MacOSX 10.3以降は FreeBSD 5.1R由来なので、 -iオプションはある。
以前のGNU sed には in-place editing 機能はない (Changelog によると 2001-09-25 ) (3.02には in place オプションは無い)

532 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/17(金) 14:26:32.28 .net]
データハンドリングとしては、
入力ファイルをコピーして更新をかける
更新処理が終わったら、入力ファイルを削除して更新ファイルをりネームして入力ファイルとする
みたいな方法で必要十分。
なんでもかんでもツールで処理するのではなく、OSが得意な機能はOSのものを使う。
クラッシュがいつ起こってもデータが確保できるのは、そういう、むしろドンくさい方法。
お遊びならいざしらず、仕事では安全確実性が少しでも高い方を選ぶのがプロ。

無論、履歴から復元なんてのも、データによっては必要だが、
処理が複雑になれば、一般的にトラブルも増える。
どこまで何をやるかは、ひとえにそのデータの重要性にかかっている。
バックアップから戻してもたいした事がないなら、何やってもいいだろう。

533 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 14:32:07.16 .net]
>>274
どうだろうね。数式の入った文章を写植
は、昔の印刷物のほうが上でしょ。
印刷屋に頼んでもtexの設定をそのまま
つかわずindesignに読み込むから、
ひどいものだ

534 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:59:51.51 .net]
昔も今もTeXでやってくれる印刷屋に頼めばいいじゃん。

535 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/12/08(金) 20:25:27.67 .net]
今も昔も餅屋のふりした餅屋はたくさんあるからな〜。餅の見る目のない会社だったってことで。

536 名前:名無しさん@お腹いっぱい。 [2017/12/29(金) 10:21:45.77 .net]
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

8DL33JQ0HX

537 名前:名無しさん@お腹いっぱい。 mailto:age [2018/01/18(木) 12:08:00.54 .net]
https://mevius.5ch.net/test/read.cgi/unix/1489979246/l50
ここから来ました。
sedでiフラグとdフラグを両方立てることってできないのでしょうか。
$ cat file
aaa
AAA
$ cat file | sed -e '/aaa/id'
AAA
d
aaa

538 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/18(木) 12:57:27.52 .net]
頑張って /[Aa]\{3\}/d と書く
今時の正規表現修飾子とか使えるsedがあるなら俺も知りたい



539 名前:538 mailto:sage [2018/01/18(木) 13:11:30.41 .net]
>>538
ありがとうございます。とりあえずその路線で行きます。
素人目にはiフラグとdフラグを同時に使えないというのは極めて不自然というか
非対称な気もしますが……
二つの役割は直交関係にあって,別に依存・背反はないと思うんですよねぇ。

540 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/18(木) 16:19:03.70 .net]
GNU sedなら I 大文字が使えるじゃあないか

541 名前:538 mailto:sage [2018/01/18(木) 16:43:03.48 .net]
$ printf '%s\n%s\n%s\n' 'AAA' 'Bbb' 'aaa' | gsed -e '/a/Id'
Bbb

おおおおおお!ありがとうございます。Iフラグは知りませんでした!
しかしこれ GNU の独自拡張なんですよねぇ……欲を言えばPOSIX標準に従いたかったんです……
すいません。とりあえず>>538の一文字づつ手動で置き換えるというやりかたで通します。
そして今気付いたんですが iという文字はフラグだけでなくて「行挿入」というコマンドとしての
解釈もあるんですね。だから「id」でdが当該箇所に挿入された形になったんですね。
馬鹿だなぁ俺

542 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/01/19(金) 06:11:37.28 .net]
iもdもコマンドじゃないの?

543 名前:542 mailto:sage [2018/01/19(金) 16:10:54.99 .net]
>>542
あーその通りですわ。
逆になぜ id で大文字小文字を無視して削除ができると思ったのか疑問なくらい阿呆でした……。
精進し直します。

# 素人考えで言うと「大文字小文字を無視して検索→その行でコマンド実行」なんて頻繁に実行するだろうに
それに対応した機能が (POSIXの範囲で) 存在しないってのはちょっと頂けないですねぇ……
# 尤も上級者の方々は他の,もっと優美な方法を採ってらっしゃるのかも知れませんが。

544 名前:名無しさん@お腹いっぱい。 mailto:age [2018/02/03(土) 04:17:58.88 .net]
ある文字がある回数続く*行*を置換することってできないんでしょうか。
...
xbcea
aaa
aaa
aaa
dkjef
...
↑このようなファイルで、
cat ./file | sed -e 's/aaa\naaa\naaa/bbb/g'
とやることで
...
xbcea
bbb
dkjef
...
このような出力が得られることを望んでいるのですが、上記のコマンドでは無理でした。> <
ご教授願いますm(_ _)m

545 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/03(土) 04:47:53.50 .net]
printf "xbcea\naaa\naaa\naaa\ndkjef\n" | sed '/aaa/{H;d;};/aaa/!{x;/^$/d;s/aaa\naaa\naaa/bbb/p;x;}'

汚いw

546 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/02/14(水) 10:22:09.93 .net]
☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆

547 名前:名無しさん@お腹いっぱい。 [2018/05/22(火) 03:04:16.83 .net]
知り合いから教えてもらったパソコン一台でお金持ちになれるやり方
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

9M87D

548 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/08/28(火) 06:46:05.19 .net]
sedとawkとgrepの違いって?



549 名前:名無しさん@お腹いっぱい。 [2018/08/31(金) 10:07:25.21 .net]
sedはストリームエディタ
grepは文字列検索
awkはスクリプト言語

550 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/13(木) 22:08:13.14 .net]
| sed -n -e "/<station /h;/<prog /{N;G;s/\n//gp}" ^

この行の後ろに<pfm>から始まる行をくっつけたいんですが、
すごく難しくてどうやっても出来ないです
どうやればいいんでしょうか?

551 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/14(金) 00:16:49.36 .net]
イマイチやりたいことがわからず
それに頭の | と尻の ^ はなんざんす
それが行ってことざんすか

552 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/14(金) 00:49:07.99 .net]
>>551
nkf.exeを併用しているバッチ内のコードをコピペしただけなので、|と^は関係ないです

>>550ではxmlファイル内の「<station〜>タグで始まる行」と
「<prog〜>タグで始まる行+その次の行」を1行の文字列に連結しているので、
さらにその後ろに<pfm>タグで始まる行を連結して1行にしたい、ということです
(この後に正規表現で最終的にcsv形式に置換しますが割愛)

553 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/15(土) 09:02:56.15 .net]
| sed -n -e "/<station /h;/<prog /{N;G;s/\n//gp}" ^ <pfm>

くっついた!

554 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/12/15(土) 19:39:46.09 .net]
あ、できたのでもういいです

555 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/02/09(土) 12:27:35.91 .net]
10年以上前にファイル内容を逆順に表示するスクリプトコピペしたけど '1!G;h;$!d'
未だに内容理解できてないぜ!

556 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/02/09(土) 12:28:51.42 .net]
556
スクリプトというかコマンドだな

557 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/02/09(土) 13:34:35.65 .net]
便利なの持ってんじゃん
tacでいいような気もするけど

558 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/03/12(火) 05:03:42.07 .net]
短くても難読すごいから可能ならtacのたぐい、基存のコマンドで処理したい



559 名前:名無しさん@お腹いっぱい。 [2019/03/19(火) 12:52:18.64 .net]
GNU sedじゃなくて、BSDsedをビルドしたい。

OS付属の/usr/binソースはあるけど
https://github.com/freebsd/freebsd/tree/master/usr.bin/sed
sed単体がない。

ビルド出来るBSDsedのURLを教えてください

560 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/03/19(火) 13:05:15.53 .net]
そこの使えばいいんじゃないの
Makefileは適当に改変するとして

561 名前:名無しさん@お腹いっぱい。 [2019/03/19(火) 13:55:05.58 .net]
>>560
make -f MakefileしだんたけどカレントディレクトリのMakefileはそのままでは使えなかった。
オプションが必要なのかも知れないが、よくわからず。

562 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/03/19(火) 19:46:54.93 .net]
>>561
FreeBSD のソース用の Makefile は BSD make 用で GNU make では使えないよ。
なんの OS を使ってるのかわからいけど、
pkgsrc が対応している OS なら pkgsrc 導入して、
textproc/nbsed をインストールするのが一番楽だと思う。

pkgsrc.org/

563 名前:名無しさん@お腹いっぱい。 [2019/03/20(水) 04:19:12.82 .net]
>>562
MacOSです。ソース側で単体ビルドできる用意されていれば出来ると考えました。
早速挑戦して上手く行ったらここに報告します。

564 名前:名無しさん@お腹いっぱい。 [2019/03/20(水) 04:24:16.70 .net]
>>562
>FreeBSD のソース用の Makefile は BSD make 用で GNU make では使えないよ。

これ当たってた。BSDの本家に問い合わせたら560のURLにあるsedのmakefileはOS用らしい。
自分で一からconfigureやmakefileを用意すればビルド出来るのかもね。

sedの最新版を使いたかったが時間あるときに563を試します。

565 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/03/20(水) 04:45:39.59 .net]
Makefileの中見てgcc一発でも行けんだろって気がするが
って自分は前それやってみた気もするが
それくらい試せよ

566 名前:名無しさん@お腹いっぱい。 [2019/03/20(水) 07:03:53.34 .net]
>>565
確か、Linux のcore utilとかだとconfigure sedみたいなかんじで、コマンドの単独コンパイルできる。
manにかかれているメアドでBSDの本家に問い合わせたら
単独コンパイル出来ないとの返事だった。OSビルド用らしい

もう消してしまったが、成功した人がいたら教えてほしい。方法がわかれば再試行する気はあります

567 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/03/20(水) 07:04:29.16 .net]
ごめん、もうsageるべきだった

568 名前:名無しさん@お腹いっぱい。 [2019/03/26(火) 09:49:12.30 .net]
別にageでもいいよ



569 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/06/24(月) 23:38:04.88 .net]
正規表現一致した行と,その一致した行と4行後のみを抽出とかってどうすればいいですか?

570 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/06/25(火) 13:21:07.60 .net]
-n '/re/{p;n;n;n;n;p;}'
とか?

571 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/06/27(木) 17:00:14.56 .net]
*.cと*.hを落として
gcc -I . compile.c main.c misc.c process.c -o sed
するとmain.cの__unreachable();がリンクエラーになるけど
https://github.com/freebsd/freebsd/blob/master/sys/sys/cdefs.h#L385を参考に((void)0);に置き換えればビルドできるじゃん

572 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/02(火) 15:24:44.16 .net]
>>571
有難う。諦めていたけど早速やってみます。

573 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/02(火) 22:35:36.02 .net]
560です。572のとおりビルドできました。

インストール済のMac版sedは2004年頃なのでバージョンアップできて助かります。
これから100近くあるソースを調べます。

linux版との互換性ない記述を書いてしまいました。
gnu sedもMac上ではビルドできていませんが諦め。

574 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/02(火) 23:46:07.78 .net]
マジかよ
gnu sedなんてそれこそ./configureしてmakeだけじゃん
--program-prefix=gくらいつけといた方がいいだろけどさ

575 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/02(火) 23:47:55.81 .net]
あー、なんかつい誘導されちゃった感じ...

576 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/03(水) 01:18:23.32 .net]
>>574
560です。エラー、コピペしていいですか?長いんですけど。。。

577 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/03(水) 03:40:41.85 .net]
gnu sed もインストール出来ました。

bash_profileのパスを最小限にしたらエラーがなくなったみたい?

578 名前:名無しさん@お腹いっぱい。 mailto:sage [2019/07/03(水) 03:41:36.40 .net]
>>576質問は取り消します。有難うございました。



579 名前:30GBでも大丈夫 thanks sed mailto:sage [2019/07/06(土) 21:39:28.25 .net]
sed -n '10509757p' primes
2147483563 2147483579 2147483587 2147483629 2147483647-2147483648-2147483647-2147483646-2147483645-2147483644

OFやらかした最終行
...
-1800706952-1800706951-1800706950-1800706949-1800706948-1800706947-1800706946-1800706945-1800706944-1800706943

sed -ie '10509758,$d' primes

580 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/08(水) 17:50:49.92 .net]
sedのホールドスペースは、その内容を削除するにはどうすれば?
とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。

581 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/09/08(水) 17:54:36.56 .net]
sedスクリプトファイルでよく使われる拡張子はあります?

ほとんどコマンドラインに-eで書ききるものでしょうが、あえてファイルにするとしたらやっぱりsed?

582 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/12/25(土) 09:31:39.87 .net]
>>581
別にこだわる必要はないけど
各種sed処理系付属のexamplesとか覗くとみんな.sedなので、あえて正書法にこだわるならやはり.sedかと
実装を隠したコマンドとして纏めたい、常に特定のオプション(-i等)で起動したい、主コードとsedの拡張チェック等を分離したいならenvを使うとよい
sedによってはオプションを重ねられたり重ねられなかったりするので
#! /usr/bin/env -S sed -f (-i -n -e 'check')

583 名前:名無しさん@お腹いっぱい。 mailto:sage [2021/12/25(土) 09:35:07.03 .net]
ところでgnu sedの付録のdc.sedってのやばいなこれ
興味深いけど誰か注釈付けてくれたりしてないのか

584 名前:名無しさん@お腹いっぱい。 [2023/02/05(日) 22:38:55.04 .net]
onigsed がダウンロードできなくて困ってます。

585 名前:名無しさん@お腹いっぱい。 mailto:sage [2023/09/30(土) 14:56:35.67 .net]
(@д@)/?.うそ~!””

586 名前:名無しさん@お腹いっぱい。 [2024/03/27(水) 19:48:02.41 .net]
たどり着けない境地だ

587 名前:名無しさん@お腹いっぱい。 [2024/03/27(水) 19:55:02.09 .net]
それらが引退した人も逮捕されてるの見つかって捕まって誰かに相手されないもんね
ヒスンは凄く特殊な銃を使って

588 名前:名無しさん@お腹いっぱい。 [2024/03/27(水) 21:38:04.20 .net]
4232
じり下げはやめて良い部屋は空いてるんだったら
胃がびっくりしておかしくなる
家庭崩壊する
それが政治とどう関係あるのが信じられなくなったから焦った



589 名前:名無しさん@お腹いっぱい。 [2024/04/01(月) 17:36:13.18 .net]
awkについて語るスレ $3
https://mevius.5ch.net/test/read.cgi/tech/1600054668/

590 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/05/30(木) 11:15:41.15 .net]
pcre使えるsedある?

591 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/05/30(木) 19:55:34.18 .net]
https://github.com/christopherfujino/sed-pcre
はイケてるんかな

592 名前:名無しさん@お腹いっぱい。 [2024/08/13(火) 08:10:10.49 .net]
sed '/削除したい行/d'

で「削除したい行」は削除されるが、「削除したい行」の1行前から2行後迄削除したい場合は、どう書くの?

593 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/08/13(火) 09:58:16.91 .net]
grepだと複数行はAオプションがあるけど、sedは複数行は無理なんじゃないかな

594 名前:名無しさん@お腹いっぱい。 [2024/08/13(火) 10:50:05.64 .net]
>>593
質問の前提を変更するっち。以下、

sed '/削除したい行/,+2d'

で、GNU sedでは「削除したい行」から2行後まで削除されるが、

595 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/08/13(火) 22:27:16.64 .net]
sed -n '{ /削除したい行/{ g; s/\n[^\n]*$//; h; n; n; bc }; H; s/.*//; :c }; ${ g; s/\n//; p }'

黒魔術じみたコードになっちゃった…

596 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/08/13(火) 23:44:44.87 .net]
複数行、出来るんだ
知らなかった

597 名前:名無しさん@お腹いっぱい。 [2024/08/14(水) 05:52:06.53 .net]
その手のためだけに,plan9のsamを使ってた.

598 名前:593 [2024/08/14(水) 19:02:06.33 .net]
>>595
ありがとう。

# でも全然解らん...



599 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/08/14(水) 20:18:50.75 .net]
仕組みを学ぶのは後で、やりたいことが実現できるならいいでしょ
sudo \rm -rf /
とかを躊躇無く実行しちゃうみたいなのは危険だけど

600 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/08/15(木) 01:15:03.31 .net]
"削除したい行"行が連続する場合
前1行がない場合
後2行がない場合

601 名前:593 [2024/08/15(木) 08:30:40.41 .net]
>>600
仕様を明確化せよという意味だべか。
「削除したい行」の1行前から2行後迄の削除対象「範囲」は、1ファイルのどこかに必ず1箇所存在する。なのでその3条件は無い。

602 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/08/15(木) 18:45:42.03 .net]
>>595
seq 10 | sed -n '{ /^9$/{ g; s/\n[^\n]*$//; h; n; n; bc }; H; s/.*//; :c }; ${ g; s/\n//; p }'

何も出力されない
最終行に到達してからさらに n コマンドを使うと、以降はアドレス $ に一致しなくなるみたい
n を $!n にするのが手っ取り早い

あとこれ s/.*// は要らないと思う
外側の { } も

seq 10 | sed -n '/^9$/{ g; s/\n[^\n]*$//; h; $!n; $!n; bc }; H; :c; ${ g; s/\n//; p }'

603 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/08/15(木) 18:59:31.57 .net]
sed '$!N;/削除したい行/,+2d;P;D;'

604 名前:名無しさん@お腹いっぱい。 mailto:sage [2024/08/15(木) 22:15:36.30 .net]
sed 'H;1h;$!d;x; s/^\([^\n]*\n\)\{0,1\}削除したい行\(\n[^\n]*\)\{0,2\}\n\?//m;'

605 名前:名無しさん@お腹いっぱい。 [2025/04/27(日) 17:41:15.94 .net]
I sed.

606 名前:名無しさん@お腹いっぱい。 mailto:sage [2025/10/17(金) 18:28:31.06 .net]
それはsaidや






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

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

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