我正在尝试检索html文件中特定div标签内的一些数据。
我当前的html代码采用以下格式。
<div class = "class0">
<div class = "class1">
<div class = "class2">
some text some text
</div>
Some more text
</div>
Too much text
</div>
当我尝试使用bash代码
在class2中的div中提取标签时sed -e ':a;N;$!ba
s/[[:space:]]\+/ /g
s/.*<div class\="class2">\(.*\).*/\1/g' test.html > out.html
我得到输出html文件,代码为
some text some text </div> Some more text </div> Too much text
我希望删除第一个</div>
之后的所有数据,而是替换最后一个数据。
有人可以详细说明我的错误。
答案 0 :(得分:1)
你可以在awk中执行此操作:
awk '/class2/,/<\/div>/ {a[++i]=$0}END{for (j=2;j<i;++j) print a[j]}' file
在匹配/class2/
和/<\/div>/
的行之间,将内容写入数组。在文件循环结束时,跳过第一行和最后一行。
您可以使用正则表达式检查第一行和最后一行,而不是制作数组:
awk '/class2/,/<\/div>/ {if (!/class2|<\/div>/) print}' file
答案 1 :(得分:0)
这适用于检索div class =&#34; class2&#34;中的文本。标签
#!/bin/bash
htmlcode='
<div class = "class0">
<div class = "class1">
<div class = "class2">
some text some text
</div>
Some more text
</div>
Too much text
</div>
'
echo $htmlcode |
sed -e's,<,\
<,g' |
grep 'div class = "class2"' |
sed -e's,>,>\
,g'|
grep -v 'div class = "class2"'