【问题标题】:RegExp to match everything up to first blank line正则表达式将所有内容匹配到第一个空行
【发布时间】:2011-02-14 15:25:14
【问题描述】:

我正在编写一个 bash 脚本,它会告诉我今天要观看的电视节目,它会从文本文件中获取这些信息。

文本格式如下:

星期一:
全家福(5 月 2 日)

星期二:
房子
生活大爆炸(5 月 3 日)

星期三:
法案
海军罪案调查处
NCIS LA(4 月 27 日)

星期四:
南方公园

星期五:
FlashForward

星期六:

周日:
HIGNFY
下腹部

我打算使用 'date +%A' 来计算星期几,并使用 grep 正则表达式中的输出从我的文本文件中返回适当的行。

如果有人可以帮助我使用我应该使用的正则表达式,我会永远很充实。

顺便说一句,这个 bash 脚本将用于 Conky 码头,所以如果有人知道实现此目的的更好方法,那么我想听听,

【问题讨论】:

    标签: regex grep conky


    【解决方案1】:
    grep -B10000 -m1 ^$ list.txt
    
    • -B10000:在匹配前打印10000行
    • -m1: 最多匹配一次
    • ^$: 匹配一个空行

    【讨论】:

    • 谢谢,不是完整的解决方案,但它有所帮助。我现在有以下“grep -A10000 Tuesday list.txt | grep -B10000 -m1 ^$”
    • 这仅打印第一天或文件的一部分,无法选择日期或偏移量。
    【解决方案2】:

    或者,你可以使用这个:

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

    这个 awk 脚本匹配一组以 /^Day:$/ 开头并以空行结尾的连续行。如果该行以非冒号字符结尾,它只会打印一行。所以它不会打印“Sunday:”或空白行。

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

        【解决方案4】:
        sed -n '/^Tuesday:/,/^$/p' list.txt
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-06
          • 1970-01-01
          • 2011-04-13
          • 2020-03-16
          • 2017-10-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多