【问题标题】:Extract data using grep/sed from html tag with special class/id使用 grep/sed 从具有特殊类/id 的 html 标记中提取数据
【发布时间】:2019-07-17 18:18:46
【问题描述】:

我需要从网站 grep 信息,它的存储方式如下:

<div class="name">Mark</div>
<div class="surname">John</div>
<div class="phone">8434</div>

等等

尝试 grep 并稍后使用 sed 解析:

grep -o '<div class="name">.*</div>' | sed -e 's?<div class="name">?|?g'

但是,当我尝试用 sed -e 's?&lt;\/div&gt;&lt;div class="phone"&gt;?|?g' 替换时 - 没有结果

并且为每个班级做同样的事情。我无法删除所有 html 标签 (sed 's/&lt;[^&gt;]\+&gt;//g'),并且只需要对带有此类的 div 执行此操作。

输出格式应该是这样的

|Mark|John|8434|

我需要用 grep/sed 来做

【问题讨论】:

  • 我知道,它可以在 python 或 selenium 中使用 beatifullsoup 或数十种方式进行解析,但我被要求这样做)
  • 斜线只是grep 的文字字符。你似乎在寻找grep -o '&lt;div class="\(name\|surname\|phone\)"&gt;.*&lt;/div&gt;'虽然我猜它也可能是refactored into your sed script

标签: sed grep


【解决方案1】:

使用awk 应该可以完成这项工作:

awk -F"[<>]" '{printf "%s|",$3}' file
Mark|John|8434|

如果最后需要换行:

awk -F"[<>]" '{printf "%s|",$3} END {print ""}' file

它创建由&lt;&gt; 分隔的字段,然后以| 作为分隔符打印第三个字段。

【讨论】:

  • 这假定 OP 在 HTML 中只有一条记录,但我的理解是他们正在抓取一个包含多个此类部分的页面。重构 Awk 以仅提取匹配行并将三个字段收集到每个匹配的单个记录中应该不会太难。
  • @tripleee 这将由 OP 来回答。她可以这样做以确保只打印div class 行:awk -F"[&lt;&gt;]" '/&lt;div class/ {printf "%s|",$3}' file
  • 是的,我需要废弃大量数据,而这些字段只是其中的一部分。 Grep 更大,最后我正在唤醒字段以将其加载到数据库中。在上次 awk 之前唤醒任何东西都会破坏我的脚本。
  • @Jane 如果您发布更多您使用的代码和命令,我们可以加入。很少需要多个awkawkgrepsed 等的组合
  • 当然,与标题相同,我需要使用 grep 或 sed 或它们的混合来解析它
猜你喜欢
  • 2012-10-20
  • 2014-07-21
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2019-03-20
  • 2015-06-11
  • 1970-01-01
相关资源
最近更新 更多