- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试从 HTML 表格中提取 3 列。我需要主机名、产品 + 地区和添加日期。所以它们将是第 1、3、4 列。
<div class="table sectionedit2">
<table class="inline">
<tr class="row0">
<th class="col0 centeralign">hostname</th>
<th class="col1 centeralign">AKA (Client hostname)</th>
<th class="col2 leftalign">Product + Region</th>
<th class="col3 centeralign">date added</th>
<th class="col4 centeralign"> decom. date </th>
<th class="col5 centeralign"> builder </th>
<th class="col6 centeralign"> build cross-checker </th>
<th class="col7 leftalign"> <strong>decommissioner</strong></th>
<th class="col8 centeralign">customer managed filesystems</th>
<th class="col9 centeralign"> only company has root? </th>
</tr>
<tr class="row1">
<th class="col0 centeralign">HostName01</th>
<td class="col1 leftalign">Host01</td>
<td class="col2 leftalign">EU</td>
<td class="col3 centeralign">2007-01-01</td>
<td class="col4 leftalign"></td>
<td class="col5 centeralign">Me</td>
<td class="col6 centeralign">You</td>
<td class="col7 leftalign">Builder01</td>
<td class="col8 leftalign">xChecker01</td>
<td class="col9 centeralign">yes</td>
</tr>
<tr class="row2">
<th class="col0 centeralign">HostName02</th>
<td class="col1 leftalign">Host02</td>
<td class="col2 leftalign">U.S</td>
<td class="col3 centeralign">2008-09-29</td>
<td class="col4 leftalign"></td>
<td class="col5 leftalign">Me01</td>
<td class="col6 leftalign">You01</td>
<td class="col7 leftalign">Builder02</td>
<td class="col8 leftalign">xChecker02</td>
<td class="col9 centeralign">yes</td>
我想得到:
Hostname Product + Region Date added
HostName01 EU 2007-01-01
HostName02 U.S 2008-09-29
之前我尝试剥离 HTML 标签并使用 awk,尽管表中的某些列是空的。这意味着我没有得到所有行的第 1、3 和 4 列。
我正在尝试使用:
xmllint --html --shell --format table.log <<< "cat //table/tr/th/td[1]/text()"
这给了我第二列,我尝试了“[0]”,但它不起作用,我不确定如何一次获取多个列。
最佳答案
您可以执行以下操作:
xmllint --xpath
使用 position()=
的 XPath 表达式仅获取第 1、3 和 4 列://table/tr/*[position()=1 or position()=3 or position()=4]
perl -pe "s/<th class=\"col0/\n<th class=\"col0/g"
等,去除标记并将其分解成单独的行grep -v '^\s*$'
去除空行column -t
最后漂亮地打印出来像这样:
xmllint --html \
--xpath "//table/tr/*[position()=1 or position()=3 or position()=4]" \
table.log \
| perl -pe "s/<th class=\"col0/\n<th class=\"col0/g" \
| perl -pe 's/<tr[^>]+>//' \
| perl -pe 's/<\/tr>//' \
| perl -pe 's/<t[dh][^>]*>//' \
| perl -pe 's/<\/t[dh]><t[dh][^>]*>/|/g' \
| perl -pe 's/<\/t[dh]>//' \
| grep -v '^\s*$' \
| column -t -s '|'
上面假设 HTML 文档在文件 table.log
中(这对于 HTML 文件来说似乎是一个奇怪的名称,但它似乎是问题中使用的名称......)。如果文件实际上在其他一些*.html
文件,当然只是输入实际的文件名。
这会给你这样的输出:
hostname Product + Region date added
HostName01 EU 2007-01-01
HostName02 U.S 2008-09-29
关于xml - 用 bash 解析 HTML 表格列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32480931/
我用 IntelliJ IDEA 2021.1 CE 在 流行!_OS 20.04 与 bash 5.0.17 . 问题造句:我将IntelliJ终端设置为/bin/bash通过 IntelliJ 设
给定如下命令: bash --shortcuts 我想显示一个快捷方式列表,就像在这个页面上一样: http://www.skorks.com/2009/09/bash-shortcuts-for-m
我有一个脚本可以操作数据、创建参数并将它们发送到第二个脚本。其中一个参数包含一个空格。 脚本1.sh: args=() args+=("A") args+=("1 2") args+=("B") .
我的脚本的“只运行一次”版本的一个非常简单的示例: ./myscript.sh var1 "var2 with spaces" var3 #!/bin/bash echo $1 #output: va
我想了解数字( double )在 bash 中是如何表示的,以及当我在 bash 中以十六进制格式打印数字时会发生什么。 根据 IEEE 754 标准,double 应由 64 位表示:52 位(1
我试图在 bash -c "..." 命令中获取 bash 脚本,但它不起作用。 如果我在 bash -c "..." 之外运行命令,它会起作用。 我需要使用 bash -c "..." 因为我想确保
如何检测我的 bash shell 中是否加载了 bash 补全包?从 bash-completion 的 2.1 版(包含在 Debian 8 中)开始,除了 BASH_COMPLETION_COM
我的 bash_profile 中有一个投影函数。现在我试图从 bash 脚本中调用这个函数,但是我得到了一个未找到的错误。如何使投影函数对 bash 脚本可见? 最佳答案 必须导出函数 export
我正在编写一个 bash 脚本,它接受许多命令行参数(可能包括空格)并通过登录 shell 将它们全部传递给程序 (/bin/some_program)。从 bash 脚本调用的登录 shell 将取
当我创建一个新的 bash 进程时,提示符默认为一个非常简单的提示符。我知道我可以编辑 .bashrc 等来更改它,但是有没有办法使用 bash 命令传递提示? 谢谢! 最佳答案 提示由 PS1、PS
好的,我希望这个问题有一定道理,但是 bash shell 和 bash 终端之间有什么区别?例子。当我第一次打开终端时,会提示我当前的目录和用户名。在终端窗口标题中显示 -bash- ,当我键入 e
我是 SBCL 的新手,我正在尝试从 bash 终端运行存储在文本文件中的 Lisp 脚本。 这是我在文件开头写的内容 http://www.sbcl.org/manual/#Running-from
我知道我们可以在 bash 中使用将十六进制转换为十进制 #!/bin/bash echo "Type a hex number" read hexNum echo $(( 16#$hexNum ))
我正在尝试在 bash 脚本中自动完成文件夹名称。如果我输入完整的文件夹名称,一切正常,但我不知道如何自动完成名称。有什么想法吗? repo() { cd ~/Desktop/_REPOS/$1 }
我想检查远程网站上的一些文件。 这里是bash命令生成计算文件md5的命令 [root]# head -n 3 zrcpathAll | awk '{print $3}' | xargs -I {}
是否有任何内置函数可以使用 bash shell 脚本从给定日期获取下周日(下周一、下周二等)?例如,2014 年 9 月 1 日之后的第一个星期日是什么时候?我预计 2014 年 9 月 7 日。
我一直在尝试根据表格重命名一些特定文件,但没有成功。它要么重命名所有文件,要么给出错误。 该目录包含数百个以长条形码命名的文件,我只想重命名包含模式 _1_ 的文件。 例子 barcode_1_bar
bash 中有没有办法用变量的内容替换文本文件中的占位符? 例如,我想发送一封电子邮件通知,如下所示: Dear Foo, Alert: blah blah blah blah blah blah
我有一个 bash 脚本,它在某些字符串上附加了一个重音字符,导致它失败,我找不到这些字符在哪里或如何进入那里。 这是一些示例输出: mv: cannot move â/tmp/myapp.zipâ
这个问题在这里已经有了答案: How do I place stdout on edit line? (1 个回答) Can a bash script prepopulate the prompt
我是一名优秀的程序员,十分优秀!