2010-05-01 64 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