使用 awk/grep 从 div 中提取内容
Extract content from div with awk/grep
假设以下 html 代码。
<div class='requirement'>
<div class='req-title'>
The quick brown fox jumps over the lazy dog
</div>
</div>
我想使用 awk
或 sed
等工具提取 The quick brown fox jumps over the lazy dog
,我很确定它可以完成。
我知道 html 解析器是这项工作的正确工具,但这是我唯一一次处理 html 内容。
假设有换行符(HTML不需要)即file.txt
内容为
<div class='requirement'>
<div class='req-title'>
The quick brown fox jumps over the lazy dog
</div>
</div>
您可以按照以下方式使用 GNU AWK
完成此任务
awk '/<div class=\x27req-title\x27>/{p=1;next}/<\x2fdiv>/{p=0}p{print}' file.txt
给出输出
The quick brown fox jumps over the lazy dog
说明:如果遇到<div class='req-title'>
设置p
到1
并转到下一行,如果遇到</div>
设置p
到0
。如果p
print
当前行。请注意,我对具有特殊含义的字符使用了十六进制。 警告 这个解决方案很脆弱,即使是很小的改变也可能会失败,例如,如果使用 "
而不是 '
,则会向 [= 添加另一个属性26=] 标签 &c.
(在 gawk 4.2.1 中测试)
I know html parser is the right tools for this job, but this is the
only time I'll be dealing with html content.
如果允许安装工具,请考虑使用hxselect
,它允许提取匹配CSS选择器的标签或其内容,在这种情况下它会像
cat file.txt | hxselect -i -c div.req-title
-i
表示不区分大小写(HTML不区分大小写),-c
表示仅包含内容(不包括开始和结束标记)div.req-title
是CSS selector 意思是 div
其中有 class req-title
。这应该比 GNU AWK
解决方案更健壮。
假设您要打印的部分是一行:
$ awk 'f{print; exit} [=10=]=="<div class=7req-title7>"{f=1}' file
The quick brown fox jumps over the lazy dog
否则:
$ awk 'f{if ([=11=]=="</div>") exit; print} [=11=]=="<div class=7req-title7>"{f=1}' file
The quick brown fox jumps over the lazy dog
假设以下 html 代码。
<div class='requirement'>
<div class='req-title'>
The quick brown fox jumps over the lazy dog
</div>
</div>
我想使用 awk
或 sed
等工具提取 The quick brown fox jumps over the lazy dog
,我很确定它可以完成。
我知道 html 解析器是这项工作的正确工具,但这是我唯一一次处理 html 内容。
假设有换行符(HTML不需要)即file.txt
内容为
<div class='requirement'>
<div class='req-title'>
The quick brown fox jumps over the lazy dog
</div>
</div>
您可以按照以下方式使用 GNU AWK
完成此任务
awk '/<div class=\x27req-title\x27>/{p=1;next}/<\x2fdiv>/{p=0}p{print}' file.txt
给出输出
The quick brown fox jumps over the lazy dog
说明:如果遇到<div class='req-title'>
设置p
到1
并转到下一行,如果遇到</div>
设置p
到0
。如果p
print
当前行。请注意,我对具有特殊含义的字符使用了十六进制。 警告 这个解决方案很脆弱,即使是很小的改变也可能会失败,例如,如果使用 "
而不是 '
,则会向 [= 添加另一个属性26=] 标签 &c.
(在 gawk 4.2.1 中测试)
I know html parser is the right tools for this job, but this is the only time I'll be dealing with html content.
如果允许安装工具,请考虑使用hxselect
,它允许提取匹配CSS选择器的标签或其内容,在这种情况下它会像
cat file.txt | hxselect -i -c div.req-title
-i
表示不区分大小写(HTML不区分大小写),-c
表示仅包含内容(不包括开始和结束标记)div.req-title
是CSS selector 意思是 div
其中有 class req-title
。这应该比 GNU AWK
解决方案更健壮。
假设您要打印的部分是一行:
$ awk 'f{print; exit} [=10=]=="<div class=7req-title7>"{f=1}' file
The quick brown fox jumps over the lazy dog
否则:
$ awk 'f{if ([=11=]=="</div>") exit; print} [=11=]=="<div class=7req-title7>"{f=1}' file
The quick brown fox jumps over the lazy dog