1

私は..を含むabc.txtというファイルを持っています.

<mapping number=1 name=m1> 
<transformation type=aggregator name=agg_m1> /> 
<transformation type=joiner name=j_m1 /> 
</mapping>

<mapping number=2 name=m2> 
<transformation type=router name=rtr_m2> /> 
<transformation type=joiner name=j_m2 /> 
</mapping>

同じ注文のフォームの出力が必要です。つまり、マッピングから名前フィールドを取得し、変換からタイプと名前フィールドを「同じ順序で取得する必要があります。

name=m1
type=aggregator name=agg_m1
type=joiner name=j_m1
name=m2
type=router name=rtr_m2
type=joiner name=j_m2

コマンド「awk」を使用して出力を取得しましたが、次の形式で取得していますが、これは正しくありません:

name=m1
name=m2
type=aggregator name=agg_m1
type=joiner name=j_m1
type=router name=rtr_m2
type=joiner name=j_m2

「grep」コマンドと「sed」コマンドも使用してみましたが、順序が保持されていないため、目的の出力が得られます。順序が保持されている出力を取得する必要があります。

4

2 に答える 2

0
 perl -lne '$_=~m/^[^\s]*\s([^\/\>]*)/g;print $1' your_file

以下でテスト済み:

> cat temp
<mapping number=1 name=m1>
<transformation type=aggregator name=agg_m1> />
<transformation type=joiner name=j_m1 />
</mapping>

<mapping number=2 name=m2>
<transformation type=router name=rtr_m2> />
<transformation type=joiner name=j_m2 />
</mapping>
> perl -lne '$_=~m/^[^\s]*\s([^\/\>]*)/g;print $1' temp
number=1 name=m1
type=aggregator name=agg_m1
type=joiner name=j_m1


number=2 name=m2
type=router name=rtr_m2
type=joiner name=j_m2

>

必要がない場合はnumber、以下の正規表現を使用してください。

perl -lne '$_=~m/^[^\s]*\s[number=\d]*([^\/\>]*)/g;print $1' your_file
于 2013-01-07T07:08:23.527 に答える
0

を使用する 1 つの方法を次に示しgrepます。

grep -oE "(name|type)=[^ >]* *[^ >]*" file

結果:

name=m1
type=aggregator name=agg_m1
type=joiner name=j_m1
name=m2
type=router name=rtr_m2
type=joiner name=j_m2
于 2013-01-07T06:45:39.030 に答える