如何使用 grep 命令提取 html 中标签之间的内容

How to extract content between tags in html using grep command

我想写一个 grep 命令来提取 h1 标签之间的内容,而不考虑 class 和其他属性

我试过了

 grep -o '>.*</h1>' Email.txt

但是只给了三个元素

使用 GNU grep,您可以使用

grep -oP '<h1(?:\s[^>]*)?>\K.*?(?=</h1>)' Email.txt

-P 选项将启用 PCRE 正则表达式引擎并且模式将匹配

  • <h1 - <h1 字符串
  • (?:\s[^>]*)? - 一个可选的非捕获组,匹配 1 次或 0 次出现的空格 (\s),后跟 >
  • 以外的 0+ 个字符
  • > - 一个 > 字符
  • \K - 匹配重置运算符,丢弃匹配内存缓冲区中到目前为止匹配的文本
  • .*? - 除换行字符外的任何 0+ 个字符,尽可能少
  • (?=</h1>) - 匹配紧跟 </h1> 子字符串的位置的正向前瞻。