如何提取HTML标签之间多次或条件的文本

我一直在研究如何从HTML中提取标题标签。 我很清楚,正则expression式和HTML不混合,可以使用grep。 不过,我在这里find的代码如下所示:

awk -vRS="</title>" '/<title>/{gsub(/.*<title>|\n+/,"");print;exit}' 

现在,这只能在标题标签之间find文本一次。 我想知道如何让它在每一行上运行。 我可以做一个cat file; while read line; do ...; done cat file; while read line; do ...; done cat file; while read line; do ...; done 。 但是,我知道这可能不是一个更好的方法。

其次,在文件中,我需要保留任何以string“ – ”开始的行。 我相信这需要在awk添加一个'或'语句,以便匹配标题标签和任何以' – '开始的行。

input文件如下所示:

 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。 任何帮助或方向,不胜感激。

对于你给定的输入, 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仅提取匹配的部分
  • 从该行的< upto last >中提取<.*>
  • \|^--.*交替模式,如果行以--从该行获取所有内容

为了仅限制title标签,

 grep -o '<title.*title>\|^--.*' ip.html