- 1 名前:名無しさん@お腹いっぱい。 [04/05/28 16:56.net]
- sedスレッド
- 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や
|

|