所以基本上我的输出如下:
<span id="PlayerCount">134,015 people currently online</span>
我想要的是一种修剪它的方法:
134,015 - 3:24:20AM - Oct 24
有人可以帮忙吗?还要注意数字可能会改变,因此可以输出“&gt;”之间的所有内容和目前的“c”?并以某种方式添加时间戳?
在Linux中使用来自终端的命令,这就叫做bash吧?
答案 0 :(得分:2)
你是否意味着:
$ 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
的相关论据是:
%r locale's 12-hour clock time (e.g., 11:11:04 PM) %b locale's abbreviated month name (e.g., Jan) %d day of month (e.g., 01) %Y year
可以从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
将结尾文本更改为当前日期和时间。答案 1 :(得分:1)
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
答案 2 :(得分:1)
produce_OUTPUT | grep -o '[0-9,]\+' | while read count; do
printf "%s - %s\n" $count "$(date +'%l:%M:%S %p - %b %e')"
done