所以基本上我的输出如下:
<span id="PlayerCount">134,015 people currently online</span>
我想要的是一种方式来修剪它显示:
134,015 - 3:24:20AM - Oct 24
有人能帮忙吗?还要注意数字可能会改变,所以是否有可能输出当前中">"one_answers"c"之间的所有内容?加上时间戳?
在Linux中使用终端命令,这叫做bash,对吗?
你的意思是:
$ echo '<span id="PlayerCount">134,015 people currently online</span>' | sed
-e 's/^[^>]*>//'
-e "s/currently.*$/$(date '+%r %b %d %Y')/"
生成:
134,015 people 03:36:30 PM Oct 24 2011
echo
仅为测试数据。第一个sed
命令将把第一个>
字符之前的所有内容都更改为空(即删除它)。
第二个将以您所需的格式更改从currently
到具有当前日期的行尾的所有内容(尽管我已经添加了年份,因为我有点坚持细节)。
此处date
的相关参数为:
格式说明符的完整列表可以从date
手册页获得(从shell执行man date
)。
一个小脚本,将给你所需的信息从你在评论中提到的页面是:
#!/usr/bin/bash
wget --output-document=- http://runescape.com/title.ws 2>/dev/null
| grep PlayerCount
| head -1l
| sed 's/^[^>]*>//'
| sed "s/currently.*$/$(date '+%r %b %d %Y')/"
pax$ ./online.sh
132,682 people 04:09:17 PM Oct 24 2011
在细节:-
wget
位下拉网页并将其写入标准输出。标准错误(进度条)被丢弃。 -
grep
只提取包含单词PlayerCount
的行。 -
head
扔掉了所有的,除了第一个。 - 第一个
sed
字符直到第一个>
字符。 - 第二个
sed
将尾随文本改为当前日期和时间。
Quickhack(tm):
$ people=$(echo '<span id="PlayerCount">134,015 people currently online</span>' |
sed -e 's/^.*>(.*) people.*$/1/')
$ echo $people - $(date)
134,015 - Mon Oct 24 09:36:23 CEST 2011
produce_OUTPUT | grep -o '[0-9,]+' | while read count; do
printf "%s - %sn" $count "$(date +'%l:%M:%S %p - %b %e')"
done