【问题标题】:To get values between two words using awk or sed使用 awk 或 sed 获取两个单词之间的值
【发布时间】:2019-09-20 12:49:29
【问题描述】:

我必须使用 awk 或 sed 或者如果它是其他一些工具,我也可以获取两个“关键”词之间的值。我试过下面的代码,我没有得到想要的输出。

echo "<response status = 'success'><result><key>LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=</key></result></response>" |  awk -v FS="key" 'NF>1{print $2}' 

我期望的输出是:

LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=

【问题讨论】:

  • 看起来像 XML,如果是这样,您最好使用 XML 解析器。无论如何使用 GNU sed:sed -En 's@.*&lt;key&gt;(.*?)&lt;/key&gt;.*@\1@p'

标签: linux bash unix awk sed


【解决方案1】:

最好在这里使用 xpath 表达式:

echo '<response status="success"><result><key>LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=</key></result></response>' | \
xmllint --xpath '/response/result/key/text()' -

LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=

【讨论】:

    【解决方案2】:

    只需修复您的字段分隔符FS

    echo ... |  awk -v FS="(<key>|</key>)" 'NF>1{print $2}' 
    LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=
    

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2016-03-14
      • 1970-01-01
      • 2011-12-26
      相关资源
      最近更新 更多