匹配第一个空行之前的所有内容的正则表达式

4
我正在编写一个bash脚本,用于显示今天要观看的电视节目,并从文本文件中获取此信息。
文本的格式如下:
Monday: Family Guy (5月2日)
Tuesday: House The Big Bang Theory (5月3日)
Wednesday: The Bill NCIS NCIS LA (4月27日)
Thursday: South Park
Friday: FlashForward
Saturday:
Sunday: HIGNFY Underbelly
我计划使用“date +%A”来确定星期几,并将输出用作grep正则表达式,以从我的文本文件返回适当的行。
如果有人能帮我制定正则表达式,我将万分感激。
顺便说一句,这个bash脚本将用于Conky dock中,如果有人知道更好的方法实现这一点,我想听听。
4个回答

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

0

或者,您可以使用这个:

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

这个 awk 脚本匹配以 /^Day:$/ 开头并以空行结尾的连续行组。它仅在行末不是冒号的情况下打印该行。因此,它不会打印 "Sunday:" 或空行。

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

谢谢,虽然不是完整的解决方案,但确实有所帮助。我现在得到了以下命令:"grep -A10000 Tuesday list.txt | grep -B10000 -m1 ^$"。 - SKWebDev
这只会打印文件的第一天或部分内容,无法选择日期或偏移量。 - dawg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接