1

sed /awk コマンドを使用してテキスト ファイルを解析しようとしています。同じ行の 2 つのパターンの間に文字を追加してテキストを印刷したい。例:私の行が

uint8_t aucRepresentationName[NR_UNIT_REPRESENTATIONS][CHARS_P_REPRESENTATION];

また

uint8_t aucRepresentationName [NR_UNIT_REPRESENTATIONS] [CHARS_P_REPRESENTATION];

印刷したいNR_UNIT_REPRESENTATIONS*CHARS_P_REPRESENTATION

そのため、sed コマンドを使用して の\n'['に行区切りを挿入し、行を適切な種類に分割してから、再度解析を試みました。

echo "bla bla bla [AK] bla bla bla bla [A_K] bla bla bla" | sed 's/\[/\n&/g;' | awk '{sub(/.*\[ /,"");sub(/\].*/,"");print;}'

echo "bla bla bla [AK] bla bla bla bla [A_K] bla bla bla" | sed 's/\[/\n&/g;' | sed -e 's/^.*\[ //g;s/ \].*$//g'

そして、それは常に2次元配列であるとは限りません。それは、なしまたは1次元/2次元配列である可能性があります。最初に[]のインスタンス数が必要です。0の場合は1を書き込み、1次元配列の場合はex A [SIZE]次にSIZE をその 2 次元配列に書き込みます ex:A[RAW][COL] RAW*COL を書き込みます..

私のコマンドで何が間違っているのか知りたいですか?または、sedをさらに研究するのに役立つので、それを行う他のオプション。

アムルタ

4

4 に答える 4

1

これを使って:

perl -lne 'push @a,/\[([^\]]*)\]/g;END{print join "*",@a}'

以下でテストされたここから変更:

> echo "bla [AK] bla [A_K] 10" | perl -lne 'push @a,/\[([^\]]*)\]/g;END{print join "*",@a}'
AK*A_K
于 2013-02-26T07:23:19.240 に答える
1

試す:

awk -F '[][]' '{print $2,$4}' OFS=\* file

OK、1ページに0、1、または2次元が1回出現する場合は、次のことを試すことができます。

awk -F '[][]' '{if(NF==3)print $2; else if(NF>4)print $2,$4; else print 1}' OFS=\* file

以下理解しにくい;):

awk -F '[][]' '{$0=NF==3?$2:NF>4?$2 OFS $4:1}1' OFS=\* file
于 2013-02-26T07:24:08.637 に答える
1

次のことを試すことができます。

echo "bla bla bla [AK] bla bla bla bla [A_K] bla bla bla" | sed 's/.*\[\(.*\)\].*\[\(.*\)\].*/\1*\2/g'

AK*A_K

于 2013-02-26T07:28:07.703 に答える
0

sedを使用:

sed -n 's/[^]]*\[\([^]]*\)\]\s*\[\([^]]*\)\].*$/\1*\2/p' input
于 2013-02-26T07:26:55.417 に答える