从文件中grep多个模式并将它们保存到不同的文件中

时间:2016-08-19 17:48:59

标签: linux bash grep

嗨,我有一个mpd,其中包含以下信息

<BaseURL>01/</BaseURL>
                                <SegmentList timescale="1000">
                                        <SegmentTimeline>
                                                <S t="0" d="11477" dtv:lastVideoPTS="1126034"/>
                                                <S t="11477" d="11111" dtv:lastVideoPTS="2126033"/>
                                                <S t="22588" d="11200" dtv:lastVideoPTS="3132038"/>
                                                <S t="33789" d="11422" dtv:lastVideoPTS="4162067"/>
                                                <S t="45211" d="11711" dtv:lastVideoPTS="5219123"/>
                                                <S t="56923" d="11177" dtv:lastVideoPTS="6222125"/>
                                                <S t="68101" d="11478" dtv:lastVideoPTS="7252154"/>
 </SegmentTimeline>
                                        <SegmentURL media="1.ts" mediaRange="0-3424419"/>
                                        <SegmentURL media="2.ts" mediaRange="0-8063319"/>
                                        <SegmentURL media="3.ts" mediaRange="0-7146631"/>
                                        <SegmentURL media="4.ts" mediaRange="0-8984143"/>
                                        <SegmentURL media="5.ts" mediaRange="0-7496499"/>
                                        <SegmentURL media="6.ts" mediaRange="0-10445091"/>
                                        <SegmentURL media="7.ts" mediaRange="0-8854423"/>
</SegmentList>
                        </Representation>
                        <Representation id="02" bandwidth="2066992" width="896" height="720" scanType="progressive">
                                <BaseURL>02/</BaseURL>
                                <SegmentList timescale="1000">
                                        <SegmentTimeline>
                                                <S t="0" d="11477" dtv:lastVideoPTS="1126034"/>
                                                <S t="11477" d="11244" dtv:lastVideoPTS="2135042"/>
                                                <S t="22722" d="11878" dtv:lastVideoPTS="3207113"/>
                                                <S t="34600" d="11778" dtv:lastVideoPTS="4270175"/>
                                                <S t="46379" d="11945" dtv:lastVideoPTS="5345249"/>
                                                <S t="58324" d="11945" dtv:lastVideoPTS="6417320"/>
                                                <S t="70270" d="11911" dtv:lastVideoPTS="7489391"/>
                                                <S t="82181" d="11478" dtv:lastVideoPTS="8522423"/>
 </SegmentTimeline>
                                        <SegmentURL media="1.ts" mediaRange="0-1801039"/>
                                        <SegmentURL media="2.ts" mediaRange="0-3065151"/>
                                        <SegmentURL media="3.ts" mediaRange="0-2842747"/>
                                        <SegmentURL media="4.ts" mediaRange="0-3216303"/>
                                        <SegmentURL media="5.ts" mediaRange="0-2798943"/>
                                        <SegmentURL media="6.ts" mediaRange="0-3977891"/>
                                        <SegmentURL media="7.ts" mediaRange="0-3301843"/>

我想grep for base url / 01什么是所有段网址和基本url / 02什么是所有段网址,你可以请帮助,因为我是脚本新...

我正在寻找的所需输出是基本url / 01保存到不同的文件,基本url / 02相同

<BaseURL>01/</BaseURL>
<SegmentURL media="1.ts" mediaRange="0-3424419"/>
                                        <SegmentURL media="2.ts" mediaRange="0-8063319"/>
                                        <SegmentURL media="3.ts" mediaRange="0-7146631"/>
                                        <SegmentURL media="4.ts" mediaRange="0-8984143"/>
                                        <SegmentURL media="5.ts" mediaRange="0-7496499"/>
                                        <SegmentURL media="6.ts" mediaRange="0-10445091"/>
                                        <SegmentURL media="7.ts" mediaRange="0-8854423"/>

3 个答案:

答案 0 :(得分:0)

我建议您使用 xml2 http://www.ofb.net/~egnor/xml2/) 将xml转换为grep-able。

不幸的是,您发布的xml似乎对我不利,请更新问题。

答案 1 :(得分:0)

未经测试但非常接近:

awk '/<BaseURL>/{close(out); out="out"++c} {print > out}' file

答案 2 :(得分:0)

试试这个 - 它会将<SegmentURL>元素后面的所有<BaseURL>元素写入名为segment.basevalue的文件中 - 所以segment.01 segment.02等

awk '
# start writing to new segment file segment.01 etc
match($0, /<BaseURL>([0-9]+)\/<\/BaseURL>/, m) {
  base=m[1]
  close(segf)
  segf="segment." base
  print "write segments to " segf
  print >segf
}
/<SegmentURL / {print >segf}
END {close(segf)}
'