我在input.txt文件中有以下内容。
<node>
<id>1</id>
<name>ServerA</name>
<type>Other</type>
</node>
<node>
<id>2</id>
<name>ServerB</name>
<type>Other</type>
</node>
现在我需要获得以下输出。只有名称字段。
服务器A 服务器B
答案 0 :(得分:0)
grep 'Server' input.txt | awk -F'[<>]' '{print $3}' ORS=' '
答案 1 :(得分:0)
如果是XML,则文档应位于根节点下,例如nodes
。
<nodes>
<node>
<id>1</id>
<name>ServerA</name>
<type>Other</type>
</node>
<node>
<id>2</id>
<name>ServerB</name>
<type>Other</type>
</node>
</nodes>
之后,您可以使用xmllint
或Perl。我不喜欢xmllint解决方案,因为格式化结果会很痛苦;这就是为什么我也提供Perl答案的原因。
$ xmllint --xpath '/nodes/node/name/text()' input.txt
ServerAServerB
$ perl -MXML::Simple -E "say foreach keys(XMLin('file.txt')->{node})"
ServerA
ServerB
答案 2 :(得分:0)
sed
替代
$ sed -nr '/^<name>/s/<[^>]+>//gp' file
ServerA
ServerB
答案 3 :(得分:0)
基于user3660575发布。
awk -v ORS=' ' -F'[<>]' '/Server/{print $3}END{printf "\n"}' file
ServerA ServerB