RegEx匹配第一个空行的所有内容

时间:2010-05-01 20:56:33

标签: regex grep conky

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

文本格式如下:

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

周二:
房子
生活大爆炸(5月3日)

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

周四:
南园

周五:
未来闪影

星期六:

星期日:
HIGNFY
腹部

我打算使用'date +%A'来计算一周中的某一天,并使用grep regex中的输出从我的文本文件中返回相应的行。

如果有人可以帮助我使用我应该使用的正则表达式,我会永远满满的。

顺便提一下,这个bash脚本将在Conky底座中使用,所以如果有人知道更好的方法来实现这一点,那么我想听听它,

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

sed -n '/^Tuesday:/,/^$/p' list.txt

答案 2 :(得分:0)

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

答案 3 :(得分:0)

或者,你可以使用它:

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

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