-
动机:在整理 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"