RegExp, чтобы соответствовать все до первой пустой строки - PullRequest
4 голосов
/ 02 мая 2010

Я пишу сценарий bash, который покажет мне, какие телепрограммы смотреть сегодня, и получит эту информацию из текстового файла.

Текст в следующем формате:

Понедельник:
Семейный парень (2 мая)

Вторник:
Дом
Теория большого взрыва (3 мая)

Среда:
Счет
NCIS
NCIS LA (27 апреля)

Четверг:
Южный парк

Пятница:
FlashForward

Суббота:

Воскресенье:
HIGNFY
Underbelly

Я планирую использовать 'date +% A' для определения дня недели и использовать вывод в регулярном выражении grep, чтобы вернуть соответствующие строки из моего текстового файла.

Если бы кто-нибудь мог помочь мне с регулярным выражением, которое я должен использовать, я был бы вечно полон.

Кстати, этот bash-скрипт будет использоваться в доке Conky, поэтому, если кто-нибудь знает лучший способ добиться этого, я бы хотел услышать об этом,

Ответы [ 4 ]

2 голосов
/ 08 октября 2010
sed -n '/^Tuesday:/,/^$/p' list.txt
2 голосов
/ 02 мая 2010

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
0 голосов
/ 02 мая 2010

Кроме того, вы можете использовать это:

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

Этот скрипт awk соответствует последовательной группе строк, которая начинается с / ^ Day: $ / и заканчивается пустой строкой. Он печатает только строку, если строка заканчивается символом, который не является двоеточием. Поэтому он не будет печатать «Sunday:» или пустую строку.

0 голосов
/ 02 мая 2010
grep -B10000 -m1 ^$ list.txt
  • -B10000: вывести 10000 строк перед матчем
  • -m1: совпадение не более одного раза
  • ^$: соответствует пустой строке
...