我有一个文件:这里的例子:
<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
指的是该\(.*\)
部分)替换整行。当然,您仍然可以创建奇怪的情况来使此失败。