ソース冒頭コメントの抽出(sed)


アニメ『デスマーチからはじまる異世界狂想曲』

異世界アニメはたくさん溢れてて、テンプレ感半端ないのですが、まだぜんぜん飽きる気がしません。おそらく私が常に現実逃避したいと考えてるからでしょう。特に私と正反対の主人公無敵ものは大好物。タイトルのデスマーチというのは、ヨードンの「デスマーチ」から来てる言葉で、ソフトウェアの失敗プロジェクトの代名詞ですね。本アニメの1話目で、主人公は家に帰れず徹夜の連続シーンがありますが、これがデスマーチ? なんだか小規模に描かれてて、デスマーチというか、プログラマーをやってたらこれ日常風景のような気もします。まあそう考えること自体が異常なのでしょうけど。
デスマーチで精神破壊されている状態で、突然異世界に行ってしまったら、私ならこのタイミングで、間違いなく燃え尽き症候群になります。もう何もしたくない、リザードマンの大群、渡りに船。冒頭で死んでしまって、あの世の方の異世界行くと思います。主人公の精神力すごいです。

さて、デスマーチでソースまでカオスになってなければ、たいていのソースコードはコメントから始まりますね。コメント別に、抽出する方法を考えてみました。

ブロックコメントタイプ(*あり)

takk@deb9:~$ head test1.c
/* 1 header
 * 2 header
 * 3 header
 */

int main()
{
}
takk@deb9:~$

一番よく見かけるコメントでしょうか。エディタによっては、改行後に
自動で*(アスタリスク)を入力してくれますね。

このタイプのコメントの場合、ファイル冒頭のコメントを抽出するには、
コメント終了の*/を見つけるまで表示すれば良いので簡単です。

takk@deb9:~$ sed '/\*\//q' test1.c
/* 1 header
 * 2 header
 * 3 header
 */
takk@deb9:~$

ブロックコメントタイプ(*なし)

takk@deb9:~$ head test2.c
/* 1 header
   2 header
   3 header
*/

int main()
{
}
takk@deb9:~$

一番コメント追記がしやすいタイプですね。こちらも多く使われてると思います。
このタイプのソース冒頭部のコメントを抽出するにも、同じコマンドでいけますね。

takk@deb9:~$ sed '/\*\//q' test2.c
/* 1 header
   2 header
   3 header
*/
takk@deb9:~$

行コメントタイプ(/* ~ */)

takk@deb9:~$ head test3.c
/* 1 header */
/* 2 header */
/* 3 header */


int main()
{
}

ブロックコメントである/* ~ */を行単位で使って、使い勝手が悪くなるコメントの書き方ではありますが、昔はよく見かけましたし、私自身見栄えが良いと感じてたのでよく使う時期もありました。まあ実用性を考えると、コメントが追記し難い上に、始まりと終わりが分からないという、パターンマッチを使って情報抽出するときに不便な点があり、今はあまり見かけなくなった気がしてます。
このタイプを抽出するには、先頭の/スラッシュがなくなる行の直前まで表示すればOKです。

takk@deb9:~$ sed '/^[^\/]/Q;/^$/Q' test3.c
/* 1 header */
/* 2 header */
/* 3 header */
takk@deb9:~$

行コメントタイプ(//)

takk@deb9:~$ head test4.c
// 1 header
// 2 header
// 3 header


int main()
{
}

/* ~ */よりは、コメントの追記がしやすいですね。 こちらを抽出するのも、さきほどと同じコマンドが使えます。

takk@deb9:~$ sed '/^[^\/]/Q;/^$/Q' test4.c
// 1 header
// 2 header
// 3 header
takk@deb9:~$

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA