Shell 脚本解析 HTML <meta> 标签

4 阅读1分钟
  • 动机:在整理 HTML 页面时,我希望快速核对页面里的元信息( 标签),但常规的 grep/sed 很难处理多行或复杂属性。最终我写了一个 Perl 驱动的 Shell 脚本 src/sh/print_meta.sh,保证解析可靠且依赖少。

  • 脚本核心:读取目标 HTML,逐个匹配 ,再把每个标签的所有属性和值拼成可读输出,最后统计数量。

#!/bin/sh
# 打印指定 HTML 文件中的所有 meta 标签属性

set -euo pipefail

if [ $# -ne 1 ]; then
  echo "用法: $0 /path/to/file.html" >&2
  exit 1
fi

FILE="$1"

if [ ! -f "$FILE" ]; then
  echo "文件不存在: $FILE" >&2
  exit 1
fi

perl -0777 -ne '
  use strict;
  use warnings;

  my $content = $_;
  my $index = 0;

  while ($content =~ /<meta\b([^>]*)>/gi) {
    my $attrs = $1 // q{};
    my @pairs;

    while ($attrs =~ /([a-zA-Z0-9:_-]+)\s*=\s*(?:"([^"]*)"|'\''([^'\'']*)'\''|([^\s"'\''=<>`]+))/g) {
      my $value = defined $2 ? $2 : defined $3 ? $3 : $4;
      push @pairs, "$1=$value";
    }

    if (@pairs) {
      print "meta[$index]: ", join(", ", @pairs), "\n";
    } else {
      print "meta[$index]: (无属性)\n";
    }

    $index++;
  }

  print "共找到 $index 个 meta 标签\n";
' "$FILE"