我正在编写一个bash脚本,它将向我展示今天要观看的电视节目,它将从文本文件中获取此信息。
文本格式如下:
星期一:
家庭盖伊(5月2日)
周二:
房子
生活大爆炸(5月3日)
周三:
条例草案
NCIS
NCIS LA(4月27日)
周四:
南园
周五:
未来闪影
星期六:
星期日:
HIGNFY
腹部
我打算使用'date +%A'来计算一周中的某一天,并使用grep regex中的输出从我的文本文件中返回相应的行。
如果有人可以帮助我使用我应该使用的正则表达式,我会永远满满的。
顺便提一下,这个bash脚本将在Conky底座中使用,所以如果有人知道更好的方法来实现这一点,那么我想听听它,
答案 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:$ /开头的连续行组,并以空行结束。如果行以不是冒号的字符结尾,它只打印一行。所以它不会打印“星期日:”或空白行。