关注shell区最新回复/主题·脚本练习

sh/bash/dash/ksh/zsh等Shell脚本
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 关注shell区最新回复/主题·脚本练习

#31

帖子 fnan » 2011-08-29 23:01

这样就如果出现在置顶位置就干掉,下面就放过。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 关注shell区最新回复/主题·脚本练习

#32

帖子 fnan » 2011-08-29 23:22

我的版本写好了,要看的时候就说一声。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 关注shell区最新回复/主题·脚本练习

#33

帖子 我就是我2 » 2011-08-29 23:25

fnan 写了:我的版本写好了,要看的时候就说一声。
:em06 当然要看, zenity 很少接触.
我想添加显示回复数. :em06
sed -nr 's/^.*row1.*"topicdetails">(.*)<\/p>.*$/re:\1/p' forum.dat | sed -n "$begin,$end"p >re.dat
paste -d "" title.dat re.dat name.dat last
上次由 我就是我2 在 2011-08-29 23:41,总共编辑 1 次。
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 关注shell区最新回复/主题·脚本练习

#34

帖子 fnan » 2011-08-29 23:40

#!/bin/bash

old=''
while :;do
fw=$(curl -s "viewforum.php?f=21" 2>/dev/null)
line=$(sed -rn '/topictitle/H;${g;s/(.*<b>置顶.<).*/\1/p}' <<<"$fw" |wc -l)
echo "line=$line"
a=$(sed -nr 's/.*"topictitle">(.{1,20}).*<\/a>.*/\1.../p' <<<"$fw" |sed -n "$line,+6p")
b=$(sed -nr 's/.*"topicdetails"><.*>(.*)<\/a>$/\1/p' <<<"$fw" | sed -n "$line,+6p")
c=$(sed -nr 's/.*"topicdetails" style.* (.*)<\/p>/\1/p' <<<"$fw"|sed -n 'n;p'|sed -n "$line,+6p")
unset fw
new=$(paste <(echo "$a") <(echo "$b") <(echo "$c"))
[[ "$new" == "$old" ]] || zenity --info --title="shell区最新回复七条" --text="$new"
old="$new"
sleep 600
done
#我没有用文件,全是变量。用位置算法可以一次处理一大块。
我想添加显示回复数.
#这么多信息。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 关注shell区最新回复/主题·脚本练习

#35

帖子 我就是我2 » 2011-08-29 23:50

使用变量比我的好很多,不用写硬盘.我想不起来使用 <<< here
使用zenity要点确定. 我使用kde4 通知区域在下方.我还是用notify-send得了.
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 关注shell区最新回复/主题·脚本练习

#36

帖子 fnan » 2011-08-31 20:12

使用zenity要点确定. 我使用kde4 通知区域在下方.我还是用notify-send得了.
#算法之外,什么都无所谓。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 关注shell区最新回复/主题·脚本练习

#37

帖子 我就是我2 » 2011-09-06 13:08

代码改进
最多只显示5条回复,也就是说回复数<=5.
经查,notify-send兼容html语法,所以以红色显示回复。

代码: 全选

...
	out=$(diff <(echo "$new") <(echo "$old") | grep '^<' | sed 's/^</<br\/><font color=red>/g;s/$/<\/font>/g')
	[ "$new" = "$old" ] || notify-send "$out"
	old="$new"
	sleep 480
done
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 关注shell区最新回复/主题·脚本练习

#38

帖子 我就是我2 » 2011-09-14 22:56

新问题及解法:有时会因网络问题而抓取不全网页,这在浏览器上也出现过,若浏览器则刷新一次或者多次,所以希望能够通过抓取多次来减少错误。
我用了论坛的cdn加速程序。

代码: 全选

data0=$(curl x 127.0.0.1:8080 -A "Mozilla/6.0" -s "http://forum.ubuntu.org.cn/viewforum.php?f=21" 2>/dev/null)
data1=$(sleep 5s;curl x 127.0.0.1:8080 -A "Mozilla/6.0" -s "http://forum.ubuntu.org.cn/viewforum.php?f=21" 2>/dev/null)
if [ ${#data0} -gt ${#data1} ];then 
    data="$data0"
else
    data="$data1"
fi
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
回复