你真的應該使用什麼是正確的命令行HTML解析器像xidel
,但這裏是一個骯髒的(非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
非常感謝Adrian - bash腳本像魅力一樣工作(我在for循環中添加了'find',以便我可以遞歸搜索目錄) - 現在我要看看xidel! – BellamyStudio