【问题标题】:awk, extract string between different delimitersawk,提取不同分隔符之间的字符串
【发布时间】:2012-08-18 14:11:21
【问题描述】:

我有如下的xml文件:

<Name ns1:translate="yes">Overview</Name>     
<TextValue>Start</TextValue>
<Title ns1:translate="yes">This is a "book"</Title>
<Title>BOOK</Title>
<Description ns1:translate="yes"/>
<TextValue ns1:translate="yes">End</TextValue> 

如果标签包含 translate="yes",我想提取字符串。输出应如下所示:

Overview = Overview
This is a "book" = This is a "book"
   = 
End = End

我需要使用 shell 脚本进行上述提取。我尝试使用:

awk awk -F '["&lt;&gt;]' '{if (/.*translate="yes".*/) {print ((NF&gt;6?OFS $(NF-2):x))}

但这并没有给我想要的结果,因为输出中的“书”没有被打印出来。请让我知道上面的 awk 有什么问题。

【问题讨论】:

  • 改用xsltproc 等可识别XML 的工具。

标签: xml awk extract


【解决方案1】:

就像tripleee 建议的那样,您应该使用xml 解析器。对于使用 awk 的肮脏解决方案,您可以这样做:

awk -F '[<>]' '{ for (i=1; i<=NF; i++) if ($i ~ /translate="yes"/) print $(i+1), "=", $(i+1) }' file.txt

结果:

Overview = Overview
This is a "book" = This is a "book"
 = 
End = End

这个解决方案只会在找到translate="yes" 后打印下一个元素。 YMMV。

【讨论】:

    【解决方案2】:
    >awk 'BEGIN{FS="<|>"}/translate="yes"/{split($2,a,">");print a[2]"="a[2]}' temp
    Overview=Overview
    This is a "book"=This is a "book"
    =
    End=End
    

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2016-02-10
      • 2016-09-05
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多