我有一个文件说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'命令,但我得到了所需的输出,因为订单没有保留。我需要获取保存订单的输出。
答案 0 :(得分:0)
这是使用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
答案 1 :(得分: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