我需要在文件中找到 >STRING< 之间的值

我需要在文件中找到 >STRING< 之间的值

我有一个文件:这里的例子:

    <hello>TestFile</hello>
    <test>2018-04-30</test>
    <greetings>mycomputer</greetings>
    **<Iwanthis>6.1.0</Iwanthis>**
    <example>20180411</example>
    blah blah

我正在寻找 6.1.0 之间的值(在本例中为 6.1.0)

有没有办法 grep 文件来获取 XXXX 值?

答案1

当然看起来像一个 XML 文件。添加根注释并使用 XML 解析器:

$ { echo '<r>'; cat file; echo '</r>'; } | xmlstarlet sel -t -v //Iwanthis
6.1.0

答案2

如果您可以相信该行上会有一个开始标记和一个结束标记,则可以将其用作以下字段的分隔符awk

awk -F "</*Iwanthis>" '(NF > 1){print $2}' yourfile

这在很多人为的情况下都会失败。为了更严格,你可以使用sed

sed -n 's_.*<Iwanthis>\(.*\)</Iwanthis>.*_\1_p' yourfile

抑制-n默认输出,因此您只能在匹配行上获得输出。我确实选择了下划线作为s命令的分隔符,以避免转义斜杠。该s命令将用开始和结束标记之间的部分(\1指的是该\(.*\)部分)替换整行。当然,您仍然可以创建奇怪的情况来使此失败。

相关内容