RegExp将所有内容匹配到第一个空行

RegExp将所有内容匹配到第一个空行,regex,grep,conky,Regex,Grep,Conky,我正在写一个bash脚本,它将告诉我今天要看什么电视节目,它将从一个文本文件中获取这些信息 文本格式如下: 星期一: 家庭男孩(5月2日) 星期二: 房子 大爆炸理论(5月3日) 星期三: 法案 NCIS NCIS洛杉矶(4月27日) 星期四: 南方公园 星期五: 向前闪现 星期六: 星期日: 高度 下腹部 我计划使用'date+%A'计算一周中的哪一天,并使用grep正则表达式中的输出从我的文本文件返回相应的行 如果有人能帮我使用我应该使用的正则表达式,我将永远非常棒 顺便说一句,这个bash

我正在写一个bash脚本,它将告诉我今天要看什么电视节目,它将从一个文本文件中获取这些信息

文本格式如下:

星期一:
家庭男孩(5月2日)

星期二:
房子
大爆炸理论(5月3日)

星期三:
法案
NCIS
NCIS洛杉矶(4月27日)

星期四:
南方公园

星期五:
向前闪现

星期六:

星期日:
高度
下腹部

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

如果有人能帮我使用我应该使用的正则表达式,我将永远非常棒

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

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

或者,您可以使用:

awk '/^'`date +%A`':$/,/^$/ {if ($0~/[^:]$/) print $0}' guide.txt
此awk脚本匹配以/^Day:$/开始并以空行结束的连续行组。仅当行以非冒号字符结尾时,才会打印该行。所以它不会打印“星期日:”或空白行。

< P> 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
#/usr/bin/perl
my$today=`date+%A`;
$today=~s/^\s*(\w*)\s*(?:$\Z)/$1/gsm;
我的$tv=加入(“”,());
我的$t(qw(星期一星期二星期四星期六星期日)){
如果$tv=~/($t:.*)(:^$|\Z)/sm,则打印“$1\n”;
}   
如果$tv=~/($Today:.*)(:^$|\Z)/sm,则打印“今天,$1\n”;
__资料__
星期一:
家庭男孩(5月2日)
星期二:
房子
大爆炸理论(5月3日)
星期三:
法案
NCIS
NCIS洛杉矶(4月27日)
星期四:
南方公园
星期五:
闪现
星期六:
星期日:
高
下腹部

谢谢,这不是完整的解决方案,但它很有帮助。我现在得到了下面的“grep-a1000 tuday list.txt | grep-B10000-m1^$”这只打印文件的第一天或部分,无法选择日期或偏移量。
sed -n '/^Tuesday:/,/^$/p' list.txt