sed '/削除したい行/d'
で「削除したい行」は削除されるが、「削除したい行」の1行前から2行後迄削除したい場合は、どう書くの?
sed
593名無しさん@お腹いっぱい。
2024/08/13(火) 08:10:10.492024/08/13(火) 09:58:16.91
grepだと複数行はAオプションがあるけど、sedは複数行は無理なんじゃないかな
595名無しさん@お腹いっぱい。
2024/08/13(火) 10:50:05.642024/08/13(火) 22:27:16.64
sed -n '{ /削除したい行/{ g; s/\n[^\n]*$//; h; n; n; bc }; H; s/.*//; :c }; ${ g; s/\n//; p }'
黒魔術じみたコードになっちゃった…
黒魔術じみたコードになっちゃった…
2024/08/13(火) 23:44:44.87
複数行、出来るんだ
知らなかった
知らなかった
598名無しさん@お腹いっぱい。
2024/08/14(水) 05:52:06.53 その手のためだけに,plan9のsamを使ってた.
599593
2024/08/14(水) 19:02:06.332024/08/14(水) 20:18:50.75
仕組みを学ぶのは後で、やりたいことが実現できるならいいでしょ
sudo \rm -rf /
とかを躊躇無く実行しちゃうみたいなのは危険だけど
sudo \rm -rf /
とかを躊躇無く実行しちゃうみたいなのは危険だけど
2024/08/15(木) 01:15:03.31
"削除したい行"行が連続する場合
前1行がない場合
後2行がない場合
前1行がない場合
後2行がない場合
602593
2024/08/15(木) 08:30:40.412024/08/15(木) 18:45:42.03
>>596
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 }'
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 }'
2024/08/15(木) 18:59:31.57
sed '$!N;/削除したい行/,+2d;P;D;'
2024/08/15(木) 22:15:36.30
sed 'H;1h;$!d;x; s/^\([^\n]*\n\)\{0,1\}削除したい行\(\n[^\n]*\)\{0,2\}\n\?//m;'
606名無しさん@お腹いっぱい。
2025/04/27(日) 17:41:15.94 I sed.
2025/10/17(金) 18:28:31.06
それはsaidや
レスを投稿する
