シェルスクリプトを使用してファイルパーサーを学習しようとしていますが、入力ファイル
input.txt
は次のようになります。
int A[4]; /* 0 16*/
char B[15]; /* 16 31*/
/* Padding may be required here */
long int C[2]; /*32 8*/
input.txt
上記の内容を私が好きな形式に解析して、output.txt
次のようにファイルを出力する方法はありますか?
0,int, A[4], 0, 16
1,char, B[16], 16,31
2,long int, C[2], 32, 8
ベストアンサー1
あなたの入力はCに似ているように見えるので、理論的にはCパーサーで解析することをお勧めします。正規表現を使用すると、簡単な操作でもさまざまなスペース、複数行の入力などを処理する必要があります。問題は、Cパーサーが明らかに目的のコメントを解析しないことです。
以下は、サンプルの期待される出力を提供するPerlスクリプトです。
#!/usr/bin/perl -n
#
BEGIN { $i = 0; }
if (m!^\s*(.+)\s+([^ ]+);\s*/\*\s*(\d+)\s*(\d+)\s*\*/\s*$!)
{
print "$i,$1,$2,$3,$4\n";
$i+=1
}
script.pl
このスクリプトを同じフォルダに保存する場合は、input.txt
次のように使用します。
./script.pl < input.txt > output.txt