エンジニア的なネタを毎週書くブログ

東京でWebサービスの開発をしています 【英語版やってみました】http://taichiw-e.hatenablog.com/

sed -n -e "/はじまり/,/おわり/p" 複数行をsedで取得する

昨日知って感動した表現。これで、「はじまり」を含む行から「おわり」を含む行までを抽出できます。

たとえば、こんな hoge.html があったときに(h1が複数行に渡るってあんまないか、、、 でもあったんだよぅ)


<body>
<h1>
<a href="hogehoge">サンプルページのタイトルだよ。</a>
</h1>
<div class="text">
この辺から本文っすかね

$ sed -n -e "/<h1>/,/<\/h1>/p" hoge.html

とやると

<h1>
<a href="hogehoge">サンプルページのタイトルだよ。</a>
</h1>

こうなります。

始めはどういう理屈かぜんぜん分からなかったのですが、
sedの条件式の
行数,行数⇒ 指定した行数間の文字列を処理する。
の応用なんですね。

/はじまり/ と /おわり/ が実はそれぞれ行数を返しているので、
結果的に「はじまり」が含まれる行から「おわり」が含まれる行までを返すという。

sedは奥が深いです。