我有一个CGI脚本(用Bash编写),它将记录有关人们如何访问我的网站的一些信息。我通过$ HTTP_USER_AGENT获得了这类信息,但我想使用操作系统,浏览器类型,浏览器版本等不同的列将其记录在我的数据库中。以下是我的浏览器中字符串的样子:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
在这种情况下,我想记录访问是使用Chrome版本32.0.1700.107从Mac OS X 10_9_1进行的。
我猜有人已经完成了这个字符串处理工作,我无法在StackOverflow中通过正确的关键字进行搜索。有谁知道怎么做?我可以将它从其他语言移植到Bash,我想这不会有问题!
提前谢谢大家!
答案 0 :(得分:1)
正如devnull已经评论过的那样,自动解析这些字符串会很棘手。有很多很多浏览器,几乎没有任何浏览器构建相同的用户代理字符串。
如果您对使用Bash解析文本感兴趣,我建议学习使用正则表达式和linux命令行工具sed
。
例如,使用sed可以拉出任何Mac OS X实例,后跟版本号,如:
echo "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36" | sed 's/.*\(Mac\ OS\ X\ [0-9]\+_[0-9]\+_[0-9]\+\).*/\1/'
上面的sed命令匹配字符串Mac OS X #_#_#
。数字用[0-9]表示,后面的加号表示允许重复。上面的命令返回以下内容:
Mac OS X 10_9_1
你可以运行类似的东西解析Chrome及其版本号如:
sed 's/.*\(Chrome\/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/'
这里还有更多的正则表达式魔术,例如匹配组(围绕我们想要保留在括号中的部分并用\ 1传递它)并转义保留字符,如空格,加号,句号和正斜杠。 / p>
答案 1 :(得分:0)