secretbase.log

コードはすべてNYSLです

sedによるソースコードにinclude文を一括挿入するスクリプト

ファイル中の最初のincludeの箇所にあるincludeを追加するスクリプトを考えた。
sedは行単位で処理をするためにファイルの"最初の行"の指定に悩んだが、
grepで行番号を引っこ抜いて、sedで行番号指定することで対応した。

うーんもっとスマートな方法があるような気がします。

下記例では、引数で渡したファイル名に #include "CommonDef.h" を追加します。

bash script

#!/bin/bash
for file in $@; do
 sed -i '/include.*CommonDef.h/d' $file

 finc="$(grep -n include $file | head -1 | cut -d':' -f 1)"
 scr="$finc s/^/#include \"CommonDef.h\"\n/"
 sed -i "$scr" $file
done

使用例

たとえば a.c があった場合、こんな感じで挿入されます

$ cat a.c
// a.c
#include <iostream>
#include <vector>
#include <CommonDef.h>
#include "CommonDef.h"

using namespace std;

int main()
{
}

tkondou@medusa ~/src
$ insertinclude a.c

tkondou@medusa ~/src
$ cat a.c
// a.c
#include "CommonDef.h"
#include <iostream>
#include <vector>

using namespace std;

int main()
{
}

参考

http://www.geocities.jp/abandonment_cat/cygwin/bshell/filter.html

sed & awkプログラミング 改訂版 (A nutshell handbook)

sed & awkプログラミング 改訂版 (A nutshell handbook)