【问题标题】:extract lines between the lines in sed or awk在 sed 或 awk 中的行之间提取行
【发布时间】:2016-10-30 05:19:26
【问题描述】:

嗨,我得到了一段日志,我需要提取 必须包含标签和标签之间的部分。

日志如下所示
2016/10/28 13:22:17 INFO 2016/10/28 13:22:17 INFO

<Command tId="27810237892289-789766789" user="root"> <ChangeTAG a_var="22341431413" b_var="837431243413" status="activated"></ChangeTAG> </Command> application=ui_6789 state=5 state_current=na 2016/10/28 13:22:19 INFO 2016/10/28 13:22:19 INFO <Command tId="27810567892289-701226789" user="root"> <ChangeTAG a_var="87656651413" b_var="345751243413" status="activated"></ChangeTAG> </Command> application=ui_3444 state=1 state_current=na 2016/10/28 13:22:29 INFO 2016/10/28 13:22:29 INFO

输出应该是这样的:
<Command tId="27810237892289-789766789" user="root"> <ChangeTAG a_var="22341431413" b_var="837431243413" status="activated"></ChangeTAG> </Command>
<Command tId="27810567892289-701226789" user="root"> <ChangeTAG a_var="87656651413" b_var="345751243413" status="activated"></ChangeTAG> </Command> 任何想法如何从登录 sed awk 或 grep 中删除它?

【问题讨论】:

  • 你的文件看起来像一个xml文件,你应该使用xml解析器(试试xidel)。

标签: bash awk sed tags extract


【解决方案1】:

使用 GNU sed:

sed -n '/<Command/,/<\/Command/p' file

【讨论】:

  • 这对我不起作用,因为文件中有更多的 commnads 标签
【解决方案2】:

awk 来救援!

$ awk '/<Command/{p=1} /<\/Command/{printf "%s", $1; p=0} p' file

<Command
      tId="27810237892289-789766789"
      user="root">
    <ChangeTAG
          a_var="22341431413"
          b_var="837431243413"
          status="activated"></ChangeTAG>
</Command> <Command
      tId="27810567892289-701226789"
      user="root">
    <ChangeTAG
          a_var="87656651413"
          b_var="345751243413"
          status="activated"></ChangeTAG>

【讨论】:

  • 这似乎有效,但需要在新行上添加
  • 嗯,当我回答时,这不是输出。这样更简单。将printf "%s", $1 更改为print $1
【解决方案3】:

使用 GNU awk 实现多字符 RS、RT 和 gensub():

$ awk -v RS='</Command>' 'RT{print gensub(/.*(<Command)/,"\\1",1) RT}' file
<Command
      tId="27810237892289-789766789"
      user="root">
    <ChangeTAG
          a_var="22341431413"
          b_var="837431243413"
          status="activated"></ChangeTAG>
</Command>
<Command
      tId="27810567892289-701226789"
      user="root">
    <ChangeTAG
          a_var="87656651413"
          b_var="345751243413"
          status="activated"></ChangeTAG>
</Command>

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多