您真正应该使用的是像xidel 这样的适当的命令行HTML 解析器,但这是一个肮脏的(非GNU)awk 解决方案,应该可以在OS X 上运行:
$ cat t.awk
#!/usr/bin/awk -f
function extr(s) {
sub(/^.+content="/, "", s);
sub(/".*$/, "", s);
return s;
}
/og:latitude/ && /content/ { latitude = extr($0) }
/og:longitude/ && /content/ { longitude = extr($0); exit }
# the above exit will speed things up but obviously requires
# that the latitude property always precedes the longitude property
# in your files
END {
if (latitude && longitude)
printf "%s,%s,%s\n", FILENAME, latitude, longitude
}
.
$ find . -name "*.html" -exec ./t.awk {} \;
bar.html,51.123456,-4.654321
foo.html,50.079176,-5.694866
这是一个 bash 版本,它遍历当前目录中的所有 .html 文件:
#!/bin/bash
for file in *.html; do
[ -f "${file}" ] || continue
latitude=
longitude=
while IFS= read -r line; do
case ${line} in
*og:latitude*content=*)
latitude=${line##*content=\"}
latitude=${latitude%%\"*}
;;
*og:longitude*content=*)
longitude=${line##*content=\"}
longitude=${longitude%%\"*}
;;
*) ;;
esac
done < "${file}"
[[ -n ${latitude} && -n ${longitude} ]] && echo "${file},${latitude},${longitude}"
done
.
$ ./test.sh
bar.html,51.123456,-4.654321
foo.html,50.079176,-5.694866