私のコードからC関数を抽出するコマンドを探しています。次のようになります。
$ grep -func "MyFunction" foo.c
int MyFunction(int i) {
return i+1;
}
私は正規表現で抽出できることを知っていますが、もっとユーザーフレンドリーな方法を探しています。
答え1
ファイルの構文が正しいと仮定すると、次の形式を使用して形式を指定し、関数を見つけてindent
抽出するプロセスをはるかに簡単にすることができます。
- を使用すると、行
indent
の最初の列に関数名を入力し、それに続く括弧を入力します。 - その後、
'}'
最初の列に現れる次の閉じカッコが関数を終了します。
indent
以下はGNU sumを使った簡単な例ですawk
。
#!/bin/sh
# $1 = file name
# $2 = function name
indent -st -orig "$1" | awk '
BEGIN { state = 0; last = ""; }
$0 ~ /^'$2'\(/ { print last; state = 1; }
{ if (state == 1) print; }
$0 ~ /^}/ { if (state) state = 2; }
{ last = $0; }
'
答え2
関数ヘッダーのみが必要な場合は、次のものを使用できますctags
。
$ ctags -x foo.c
MyFunction 1 foo.c int MyFunction(int i) {