4

今日見るテレビ番組を表示する bash スクリプトを作成しています。このスクリプトは、この情報をテキスト ファイルから取得します。

テキストは次の形式です。

月曜日:
Family Guy (5 月 2 日)

火曜日:
House
The Big Bang Theory (5 月 3 日)

水曜日:
The Bill
NCIS
NCIS LA (4 月 27 日)

木曜日:
South Park

金曜日:
FlashForward

土曜日:

日曜日:
HIGNFY
Underbelly

'date +%A' を使用して曜日を計算し、その出力を grep 正規表現で使用して、テキスト ファイルから適切な行を返すことを計画しています。

誰かが私が使用すべき正規表現で私を助けることができれば、私は永遠にいっぱいになるでしょう.

ちなみに、この bash スクリプトは Conky ドックで使用されるので、これを実現するためのより良い方法を誰かが知っている場合は、それについて聞きたいです。

4

4 に答える 4

2
sed -n '/^Tuesday:/,/^$/p' list.txt
于 2010-10-08T14:50:56.457 に答える
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
于 2010-05-02T01:48:22.310 に答える
0

または、これを使用できます。

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

この awk スクリプトは、/^Day:$/ で始まり空白行で終わる連続する行のグループに一致します。行がコロンではない文字で終わる場合にのみ行を出力します。したがって、「Sunday:」または空白行は出力されません。

于 2010-05-02T00:05:57.533 に答える
0
grep -B10000 -m1 ^$ list.txt
  • -B10000: マッチの前に 10000 行を出力します
  • -m1: 最大 1 回一致
  • ^$: 空行にマッチ
于 2010-05-01T21:00:22.093 に答える