2010-05-01 63 views
4

我正在写一个bash脚本,它会告诉我今天看什么电视节目,它会从文本文件中获取这些信息。RegExp匹配一切到第一个空白行

的文本的格式如下:

星期一:
家庭盖伊(5月2日)

周二:

大爆炸理论(5月3日)

周三:
条例草案
NCIS
NCIS LA(4月27日)

周四:
南园

周五:
未来闪影

周六:

星期日:
HIGNFY
软肋

我打算使用 '日期+%A'计算一周中的某一天,并使用grep正则表达式中的输出从我的文本文件中返回相应的行即

如果有人可以帮助我的正则表达式我应该使用我会永远伟大的完整。

顺便说一句,这个bash脚本将在Conky的码头使用,如果任何人有更好的方式来做到这一点知道那么我想听到它,

回答

0
grep -B10000 -m1 ^$ list.txt 
  • -B10000:打印10000在比赛前行
  • -m1:比赛最多一次
  • ^$:匹配一个空行
+0

谢谢你,不是完整的解决方案,但它帮助。 我现在得到了以下“grep -A10000星期二list.txt | grep -B10000 -m1^$” – SKWebDev 2010-05-01 21:32:04

+0

这只打印文件的第一天或部分,无法选择日期或偏移量。 – dawg 2010-05-02 16:11:38

0

或者,您可以使用此:

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

这awk脚本匹配与/ ^日开始行的连续组:$ /和一个空行结束。如果该行以不是冒号的字符结束,它只会打印一行。所以它不会打印“星期日:”或空白行。

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 
2
sed -n '/^Tuesday:/,/^$/p' list.txt