2011-10-18 26 views
0

私はこのような関数シグネチャを持つファイルがあります:で終わるように、シェルスクリプトまたはあなたがこれをどのように処理するか同様のを使用して検索 - テキスト処理

void something(float a, int b, char c);

を:

float int char

+0

すべての行にこの正確な形式がありますか、またはCのようなソースコードの一般的な部分を処理しようとしていますか? – frankc

+0

はい、すべての行はまったく同じ形式です。 –

答えて

0

この作品はでしょうか?私はIFS変数といくつかのループで体操を少ししなければならなかったが、それは私のためにうまくいくようだ。 "無効" ラインのいくつかは先頭のスペースまたはタブを使用している場合は、しかし、sedの表現を調整する必要があります...

test.txtの

void something(float a, int b, char c); 
void something_else(string s, int p); 
void test(float test); 
void tata(string k); 
void foobar(float a, int l, char e); 

test.sh

#!/bin/bash 
filename=$1 
OLD_IFS=$IFS 
IFS=$'\n' 
trap "rm -f $$.tmp" EXIT SIGHUP 
for line in $(egrep -i "^void\ " $filename | sed -e 's/^void \w*(\(.*\));/\1/'); do 
     IFS=, 
     for s in $line; do 
       echo $s | awk '{print $1}' >> $$.tmp 
     done 
     IFS=$'\n' 
done 
IFS=$OLD_IFS 
sort $$.tmp | uniq | tr "\n" " " 
echo 
exit 0 

結果:

$ ./test.sh test.txt 
char float int string