今天写了个"bash"脚本"rank.sh",用来查询指定域名和关键字在百度搜索引擎的排名,记录下:


"rank.sh"脚本主要用到的命令:
1. xxd命令: "xxd"能将文本转为16进制,再用"sed"实现每两个字符前插入一个"%"符号,即可在bash实现"url编码"的功能,如:
echo '中文'|xxd -plain | sed 's/\(..\)/%\1/g'
%e4%b8%ad%e6%96%87%0a

2. curl: 用来搜索关键字并抓结果,"curl"的用法参考:Linux curl命令参数详解 3. sed: 本来"rank.sh"脚本大部分功能应该由"sed"命令实现的,遗憾的是"sed"不支持"非贪婪模式",如:
echo "1<p>2</p>3<p>4</p>5" | sed 's#<p>.*\?</p>##g'
15 #期望结果为135,输出的结果却是15

虽然本例可以通过下列正则表达式实现,但是在特殊场合不支持"非贪婪模式",依然是一件很悲剧的事情,所以"rank.sh"脚本大部分功能实现都由"grep -Po"代替了。
 echo "1<p>2</p>3<p>4</p>5"|sed 's#<p>[0-9]</p>##g'
135

4. grep: "grep"真是个好东西,能实现php "preg_match_all"的功能,还支持"非贪婪模式",真是太好了:
echo "1<p>2</p>3<p>4</p>5" | grep -Po "<p>[0-9]</p>"
<p>2</p>
<p>4</p>


linux bash查询百度排名"rank.sh"脚本内容:
下面是bash百度排名查询脚本"rank.sh"的代码,你可以复制代码粘贴到linux系统中运行,也可以直接通过"wget http://www.aiezu.com/uploads/bash/rank.sh "下载脚本运行,记住要用"chmod a+x rank.sh"添加可执行权限才可运行哦~
#!/bin/bash
A="Mozilla/5.0" #user-agent
cookies="/tmp/baiducookies"
if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Useage: $0 DomainName Keyword";
    echo "Example: $0 www.aiezu.com 爱E族";
    exit
fi
#中文urlencode编码
key=$(echo "$2" | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g');
me=$1;
#页码1-10页,每页100个查询结果,如果第一页未找到结果,自动找下一页
for page in `seq 1 10`;
do
    d="wd=${key}&usm=1&ie=utf-8&rsv_page=1&rn=100";
    if [ "$page" -gt "1" ]; then
        let pn=(page-1)*100;
        d="$d&pn=$pn";
    fi
    url="http://www.baidu.com/s";
    r0=$(curl -c "$cookies" -b "$cookies" -d "$d" -G -A "$A" -e "$e" -# "$url"|tr '\n' ' '|sed 's#</\?b>##g');
    r1=$(echo $r0|grep -Po '<table[^>]*id="[0-9]*"[^>]*>.*?</table>'|sed -n 's@.* id="\([0-9]*\)".*\(<span class="\(g\|c-showurl\)">\|<font size="-1" color="#008000">\)[ ]*\([^> /]*\).*@\1|\4@gp');
    v=$(echo $r1|grep -Po "[^ ]*$me"|cut -d'|' -f2 | sort | uniq);
    if ! [ -z "$v" ]; then
        for domain in $v;
        do
            num=`echo $r1|grep -Po "[^ ]*$domain"|cut -d'|' -f1|tr '\n' ' '`;
            echo -e "$domain\t$num";
        done | sort -k 2 -n
        exit
    fi
done
linux bash查询百度排名"rank.sh"脚本使用方法:
复制或者下载脚本到linux系统,然后:
# chmod a+x rank.sh #添加可执行权限
# ./rank.sh #查看用法
Useage: ./rank.sh DomainName Keyword
Example: ./rank.sh www.aiezu.com 爱E族
# ./rank.sh qq.com 微博
######################################## 100.0%
t.qq.com	2 11 13 14 17 35 36 44 45 48 53 81
p.t.qq.com	17 31 #域名p.t.qq.com在查询关键"微博"时间在百度排在第17、31名
dev.t.qq.com	35
open.t.qq.com	36
blog.qq.com	38
www.qq.com	49
t.auto.qq.com	56
ent.qq.com	81