修剪文字并添加时间戳?

时间:2011-10-24 07:26:10

标签: bash

所以基本上我的输出如下:

<span id="PlayerCount">134,015 people currently online</span>

我想要的是一种修剪它的方法:

134,015 - 3:24:20AM - Oct 24

有人可以帮忙吗?还要注意数字可能会改变,因此可以输出“&gt;”之间的所有内容和目前的“c”?并以某种方式添加时间戳?

在Linux中使用来自终端的命令,这就叫做bash吧?

3 个答案:

答案 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