使用分隔符

时间:2016-10-18 18:04:33

标签: awk grep

我在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

4 个答案:

答案 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