如何使用bash下sed/awk/grep等工具提取内含img标签的article标签
解决方案
你可以用awk或者sed实现需求,两种方案如下:
方案1:使用awk(兼容性更好,逻辑更易读)
运行命令:
awk '/<article class.*article--nyheter/{buf="";f=1} f{buf=buf $0 ORS} /<\/article>/{f=0; if(buf ~ /<img /) print buf}' onlyArticlesWithOutSpace.html > test.html
命令逻辑说明:
- 匹配到符合class规则的article起始标签时,清空内容缓存、标记进入article块
- 在article块内时,逐行把内容存入缓存
- 匹配到article结束标签时,标记退出块,检查缓存中是否包含
<img子串,存在则输出整个缓存的article块内容
方案2:使用GNU sed
运行命令:
sed -n '/<article class.*article--nyheter/{:a;N;/<\/article>/!ba;/<img /p}' onlyArticlesWithOutSpace.html > test.html
命令逻辑说明:
- 匹配到article起始标签后,循环读取后续行直到凑齐完整的article闭合块
- 检查完整块中是否包含
<img子串,存在则输出整个块
注意:以上命令仅适配无嵌套article标签、结构固定的输入内容,符合你提供的样例格式场景。
内容的提问来源于stack exchange,提问作者mohsinali1317
相关产品推荐
相关产品推荐

