小编Rus*_*sso的帖子

在 Bash 中从特定/通用 XML 文件生成树输出

我正在尝试从 Bash 中的 XML 文件生成一棵树。

这是 XML 文件的一部分:

<menu name="main_menu" display="Main Menu">
  <application name="load_profiles" display="Load Profile"/>
  <application name="save_profiles" display="Save Profile"/>
  <application name="remove_profiles" display="Delete Profile"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

我尝试过使用 CAT、GREP 和 AWK:

cat menu.xml | grep menu\ name | awk -v FS="(display=\"|\" help)" '{print $2}' > menulist.txt
Run Code Online (Sandbox Code Playgroud)

我首先使用具有“菜单名称”的行进行 GREPed,然后打印“display =”和“help”之间的测试并输出以下输出:

Main Menu">
Broadband
Load and Save Profiles
xDSL Interface
Run Code Online (Sandbox Code Playgroud)

但我想要的是 Grep 所有具有“菜单名称”、“参数类型”、“应用程序名称”和“值 id”的行,并在树状输出中打印它们的显示名称。我不确定如何从多行中 Grep 多个值并从中打印特定字符串。

然后我发现使用 XML 解析器工具来完成此操作相对容易一些。所以我尝试过 XMLStarlet:

xmlstarlet el menu.xml | awk -F'/' 'BEGIN{print "digraph{"}{print $(NF-1)" -> "$NF}END{print"}"}' > menumenutxt.txt
Run Code Online (Sandbox Code Playgroud)

使用此命令我发现以下输出: …

command-line xml text-processing

7
推荐指数
1
解决办法
3401
查看次数

标签 统计

command-line ×1

text-processing ×1

xml ×1