regex - 提取html标签之间的内容使用 bash shell 命令
问题描述
我想在 bash 中使用 shell 脚本解析下面的 html 文本字符串。
<pre style=\"font-family: helvetica, arial, sans-serif; white-space: pre-wrap; margin: 0;\">peter-2</pre>\n <pre style=\"font-family: helvetica, arial, sans-serif; white-space: pre-wrap; margin: 0;\">peter-1</pre>\n <pre style=\"font-family: helvetica, arial, sans-serif; white-space: pre-wrap; margin: 0;\">peter0</pre>\n <pre style=\"font-family: helvetica, arial, sans-serif; white-space: pre-wrap; margin: 0;\">peter1</pre>\n <pre style=\"font-family: helvetica, arial, sans-serif; white-space: pre-wrap; margin: 0;\">peter2</pre>\n <pre style=\"font-family: helvetica, arial, sans-serif; white-space: pre-wrap; margin: 0;\">peter3</pre>\n <pre style=\"font-family: helvetica, arial, sans-serif; white-space: pre-wrap; margin: 0;\">peter4</pre>\n
预期输出:
peter-2
peter-1
peter0
peter1
peter2
peter3
peter4
我希望 shell 命令基于<pre
标签而不是基于位置来提取值。
解决方案
假设您的输入总是那么常规,并且由于某种原因您不能使用 XML 解析器,而只是想要一些便宜而愉快的东西,然后使用接受\n
替换文本的 sed(例如 GNU sed):
$ sed 's:</pre>:\n:g' file | sed -n 's/.*>//p'
peter-2
peter-1
peter0
peter1
peter2
peter3
peter4
否则在 bash 中使用任何 sed:
$ sed 's:</pre>:\'$'\n'':g' file | sed -n 's/.*>//p'
peter-2
peter-1
peter0
peter1
peter2
peter3
peter4
或任何外壳中的任何 awk:
$ awk '{gsub("</pre>","\n")}1' file | awk 'sub(/.*>/,"")'
peter-2
peter-1
peter0
peter1
peter2
peter3
peter4
推荐阅读
- r - 如何在R中按列名拆分数据框?
- spring-mvc - 如何在 Spring Boot 中忽略 Post 请求正文中的 Null 值
- twitter-bootstrap-3 - AdminLTE - 如何折叠侧边栏而不是顶部导航栏?
- java - 方法 fromMessage(String, Class
) 在 MessageConverter 类型中不适用于参数 (String, Class ) - python - 在pycharm中并行运行两个python脚本
- reactjs - 如何停止自动将所有文件的相对路径替换为绝对路径
- c# - SignalR 服务器是否有 DLL 或任何其他要求才能工作?
- php - 如何在PHPExcel中合并具有相同值的行,使用if逻辑进行数组循环
- angular - 自定义订阅错误角度
- shell - 如何将 .txt 文件的内容逐行附加到另一个 .txt 文件?