我一直在研究如何从html中提取标题标签。我几乎已经发现正则表达式和HTML没有混合,可以使用grep。但是,我找到的代码here,如下所示:
awk -vRS="</title>" '/<title>/{gsub(/.*<title>|\n+/,"");print;exit}'
现在,这只能在标题标签之间找到一次文本。我想知道如何让它在每一行上运行。我可以做cat file; while read line; do ...; done
。但是,我知道这可能不是很有效,而且还有更好的方法。
其次,在文件中我需要保留以字符串&#39; - &#39;开头的所有行。我认为这需要添加&#39;或&#39; awk
中的语句,以便与标题标记和以&#39;开头的任何行匹配 - &#39;
输入文件如下所示:
text text text <title>random text of the title 1</title> random html stuff
--time--
xyz more random text <title>random text of the title 2</title> hmtl text
--time--
some text <title>random text of the title 3</title> more text tags
--time--
text here <title>random text of the title 4</title> random text html
--time--
所需的输出:
<title>random text of the title 1</title>
--time--
<title>random text of the title 2</title>
--time--
<title>random text of the title 3</title>
--time--
<title>random text of the title 4</title>
--time--
我对awk并不是那么好,但我在学习。我知道应该有一个选项可以打印所有,但它是我真正坚持的OR语句。如果你觉得效率更高,我愿意接受sed或grep。非常感谢任何帮助或方向。
答案 0 :(得分:1)
对于您的输入,grep
就足够了
$ grep -o '<.*>\|^--.*' ip.html
<title>random text of the title 1</title>
--time--
<title>random text of the title 2</title>
--time--
<title>random text of the title 3</title>
--time--
<title>random text of the title 4</title>
--time--
-o
仅提取匹配的部分<.*>
从<
中提取到行中的最后>
\|^--.*
备用模式,如果行以--
开头,则从该行获取所有内容仅限于title
代码,
grep -o '<title.*title>\|^--.*' ip.html