使用Shell脚本从xml标签获取属性值并转换为csv

职位

任务:

我正在尝试使用Shell脚本从xml标记中获取属性值,将值分割并将其保存在.csv文件中。

这是xml的样子:

<host>
  <servers>
    <server name="Type1Name1-Port1" >...</server>
    <server name="Type2Name2-Port2" >...</server>
    <server name="Type3Name3-Port3" >...</server>
    ...
    <server name="TypexNamex-Portx" >...</server>
  </servers>
</host>

我想从“名称”属性中获取值并将其拆分,如下所示:
Type;Name;Port

我想要的输出csv文件应如下所示:

Type1;Name1;Port1
Type2;Name2;Port2
Type3;Name3;Port3
...
Typex;Namex;Portx

问题:

  • 我无法在服务器上安装任何东西
  • 我只能使用“ ksh-awk” /“ xmllint wihtout --xpath” /“标准linux命令”

我可以使用我想要的任何外壳语言。我更喜欢bash和ksh。

我的问题:

  • 您认为有可能解决我的任务吗?
  • 子任务的最佳方法是什么?(阅读,拆分,写作)

编辑:

服务器名称的示例数据:

T-TTT_AAA-A-SSS-PPPP

其中T代表类型,A代表应用程序名称,S代表服务器名称,P代表端口。T,A和S的长度是可变的。P是常数。

阿瑟雷

这是我想出的,仅使用通用工具:xmllintsed

echo 'cat //host/servers/server/@name' | xmllint --shell data.xml | sed -n 's: name=\"\([A-Z][a-z0-9]*\)\([A-Z][a-z0-9]*\)-\(.*\)\":\1,\2,\3:p'

sed部分在发布时根据OP的示例完成。

分解:

  • echo 'cat //host/servers/server/@name':我们将此命令传递给xmllint它将捕获name内部所有节点属性<host><servers><server ...> ... </server></servers></hosts>
  • xmllint --shell data.xml:迭代data.xml并执行在交互式shell中作为参数传递的命令。
  • sed -n 's: name=\"\([A-Z][a-z0-9]*\)\([A-Z][a-z0-9]*\)-\(.*\)\":\1;\2;\3:p':我们处理的输出xmllint以仅保留我们感兴趣的数据
    • xmllint 将产生以下输出: name="Type1Name1-Port1"
    • 我们定义了3个捕获组:一个大写字母,后跟除大写字母(for Type之外的任何字符,另一个大写字母后跟除大写字母(for Name之外的任何字符,以及在-"字符之间的任何字符
    • 我们告诉sed只打印匹配的字符串,并用分号分隔

输出 :

Type1;Name1;Port1
Type2;Name2;Port2
Type3;Name3;Port3
Typex;Namex;Portx

编辑:

要适应您在注释中指示的模式,只需更改sed正则表达式,例如:

sed -n 's: name=\"\(.*\)_\(.*\)-\(.\{4\}\)\":\1,\2,\3:p'

这将与format匹配T-TTT_AAA-A-SSS-PPPP,并具有类型和服务器名称的任何长度。尝试摆弄正则表达式或在regex代码中问另一个问题,如果这不是您所需要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在shell脚本中将变量的值相加并转换为十六进制

来自分类Dev

使用批处理脚本从xml文件获取标签值并将结果保存到csv文件中

来自分类Dev

从Farbtastic获取十六进制值并转换为RGB以在php中的imagefilter中使用

来自分类Dev

使用Groovy脚本将CSV转换为XML

来自分类Dev

使用标签上的值将xml转换为字典

来自分类Dev

使用 DD 创建 MFT 的副本并转换为 CSV?

来自分类Dev

替换 shell 脚本中的 XML 标签值

来自分类Dev

将 XML 标签转换为 CSV

来自分类Dev

macOS Bash shell 脚本中的目录截断并转换为字符串问题

来自分类Dev

使用脚本从XML获取属性

来自分类Dev

获取价值并转换为数字?

来自分类Dev

XML解析并转换为哈希-Ruby

来自分类Dev

读取注册值并转换为日期

来自分类Dev

获取属性类型并转换泛型

来自分类Dev

将属性值转换为xml元素

来自分类Dev

XML转换为CSV并更改值

来自分类Dev

CSV文件,需要提取数据,格式化数据并转换为xml

来自分类Dev

使用shell脚本将文本文件转换为csv

来自分类Dev

如何使用Shell脚本将xlsx文件转换为csv文件?

来自分类Dev

如何在Pandas Dataframe中获取行并转换为Column的值?

来自分类Dev

使用Shell脚本将具有表名的文本转换为带有列名的单独值

来自分类Dev

Shell脚本:将原始输出(从dict行转换为csv)

来自分类Dev

如何使用第一行中的标签将此.csv文件转换为.xml

来自分类Dev

Shell脚本CURL JSON值转换为变量

来自分类Dev

使用Python从XML标签获取属性

来自分类Dev

使用 Bash 从 XML 属性获取注释标签

来自分类Dev

在JavaScript中将XML属性转换为HTML标签

来自分类Dev

使用XSLT将目标XML上的属性值转换为XML

来自分类Dev

使用python解析CSV文件并转换为Pandas Dataframe以绘制Django模板的图形

Related 相关文章

  1. 1

    在shell脚本中将变量的值相加并转换为十六进制

  2. 2

    使用批处理脚本从xml文件获取标签值并将结果保存到csv文件中

  3. 3

    从Farbtastic获取十六进制值并转换为RGB以在php中的imagefilter中使用

  4. 4

    使用Groovy脚本将CSV转换为XML

  5. 5

    使用标签上的值将xml转换为字典

  6. 6

    使用 DD 创建 MFT 的副本并转换为 CSV?

  7. 7

    替换 shell 脚本中的 XML 标签值

  8. 8

    将 XML 标签转换为 CSV

  9. 9

    macOS Bash shell 脚本中的目录截断并转换为字符串问题

  10. 10

    使用脚本从XML获取属性

  11. 11

    获取价值并转换为数字?

  12. 12

    XML解析并转换为哈希-Ruby

  13. 13

    读取注册值并转换为日期

  14. 14

    获取属性类型并转换泛型

  15. 15

    将属性值转换为xml元素

  16. 16

    XML转换为CSV并更改值

  17. 17

    CSV文件,需要提取数据,格式化数据并转换为xml

  18. 18

    使用shell脚本将文本文件转换为csv

  19. 19

    如何使用Shell脚本将xlsx文件转换为csv文件?

  20. 20

    如何在Pandas Dataframe中获取行并转换为Column的值?

  21. 21

    使用Shell脚本将具有表名的文本转换为带有列名的单独值

  22. 22

    Shell脚本:将原始输出(从dict行转换为csv)

  23. 23

    如何使用第一行中的标签将此.csv文件转换为.xml

  24. 24

    Shell脚本CURL JSON值转换为变量

  25. 25

    使用Python从XML标签获取属性

  26. 26

    使用 Bash 从 XML 属性获取注释标签

  27. 27

    在JavaScript中将XML属性转换为HTML标签

  28. 28

    使用XSLT将目标XML上的属性值转换为XML

  29. 29

    使用python解析CSV文件并转换为Pandas Dataframe以绘制Django模板的图形

热门标签

归档