4

我正在编写一个 bash 脚本,它将向我展示今天要观看的电视节目,它将从文本文件中获取此信息。

文本格式如下:

周一:
全家福(5 月 2 日)

周二:
House
The Big Bang Theory(5 月 3 日)

周三:
法案
NCIS
NCIS LA(4 月 27 日)

周四:
南方公园

周五:
FlashForward

周六:

周日:
HIGNFY
Underbelly

我打算使用 'date +%A' 来计算星期几,并使用 grep 正则表达式中的输出从我的文本文件中返回适当的行。

如果有人可以帮助我使用我应该使用的正则表达式,我将永远非常充实。

顺便说一句,这个 bash 脚本将在 Conky 码头中使用,所以如果有人知道实现这一目标的更好方法,那么我想听听它,

4

4 回答 4

2

Perl 解决方案:

#!/usr/bin/perl 

my $today=`date +%A`; 
$today=~s/^\s*(\w*)\s*(?:$|\Z)/$1/gsm;

my $tv=join('',(<DATA>));

for my $t (qw(Monday Tuesday Wednesday Thursday Friday Saturday Sunday)) {
    print "$1\n" if $tv=~/($t:.*?)(?:^$|\Z)/sm; 
}   

print "Today, $1\n" if $tv=~/($today:.*?)(?:^$|\Z)/sm; 

__DATA__
Monday:
Family Guy (2nd May)

Tuesday:
House
The Big Bang Theory (3rd May)

Wednesday:
The Bill
NCIS
NCIS LA (27th April)

Thursday:
South Park

Friday:
FlashForward

Saturday:

Sunday:
HIGNFY
Underbelly
于 2010-05-02T01:48:22.310 回答
2
sed -n '/^Tuesday:/,/^$/p' list.txt
于 2010-10-08T14:50:56.457 回答
0
grep -B10000 -m1 ^$ list.txt
  • -B10000: 在匹配前打印 10000 行
  • -m1: 最多匹配一次
  • ^$: 匹配一个空行
于 2010-05-01T21:00:22.093 回答
0

或者,您可以使用这个:

awk '/^'`date +%A`':$/,/^$/ {if ($0~/[^:]$/) print $0}' guide.txt

此 awk 脚本匹配一组以 /^Day:$/ 开头并以空行结尾的连续行。如果该行以非冒号字符结尾,它只会打印一行。所以它不会打印“星期日:”或空白行。

于 2010-05-02T00:05:57.533 回答