0
私はこのような関数シグネチャを持つファイルがあります:で終わるように、シェルスクリプトまたはあなたがこれをどのように処理するか同様のを使用して検索 - テキスト処理
void something(float a, int b, char c);
を:
float int char
私はこのような関数シグネチャを持つファイルがあります:で終わるように、シェルスクリプトまたはあなたがこれをどのように処理するか同様のを使用して検索 - テキスト処理
void something(float a, int b, char c);
を:
float int char
この作品はでしょうか?私は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
すべての行にこの正確な形式がありますか、またはCのようなソースコードの一般的な部分を処理しようとしていますか? – frankc
はい、すべての行はまったく同じ形式です。 –