【问题标题】:sed command to print paragraphs after a patternsed 命令在模式之后打印段落
【发布时间】:2013-03-14 23:20:17
【问题描述】:

我有一个日志文件,其中数据条目如下:每个条目以time:开头 现在我只想在特定时间后打印条目。例如time : 20130309235926之后,我想打印所有记录,所以在我的情况下,它应该打印最后2条记录。

是否有 sed 命令可以执行此操作?

time: 20130309235926
dn: 
changetype: modify
-
replace: modifiersname
modifiersname: 
 dc=
-
replace: modifytimestamp
modifytimestamp: 20130310045926Z
-

time: 20130309235959
dn:
changetype: modify
-
replace: modifiersname
modifiersname: 
 dc=
-
replace: modifytimestamp
modifytimestamp: 20130310045926Z
-

time: 20130308025010
dn: 
changetype: modify
-
replace: modifiersname
modifiersname: 
 dc=
-
replace: modifytimestamp
modifytimestamp: 20130310045926Z
-

【问题讨论】:

  • 不确定sed,但awk 可能对这类事情有用。

标签: sed paragraphs


【解决方案1】:

我喜欢用 perl 来做段落相关的事情:

perl -00 -ne '$t = (/time: (\d+)/)[0]; print if $t gt "20130309235926"'

-00 标志在段落中提供输入(由空行分隔)

【讨论】:

    【解决方案2】:

    这取决于找到完全匹配的时间,因为用sed 进行算术运算很困难。例如,对于完全匹配,此命令使用 -n 开关来禁用自动打印,并使用范围从与您的时间匹配的行开始打印,直到文件结束 ($):

    sed -n '/time:[ ]*20130309235926/,$ p' infile
    

    EDIT 修复之前的命令:

    sed -n '
    
      ## When found a blank line between a line with your time and end of file,
      ## jump to label "a".
      /time:[ ]*20130309235926/,$ { 
        /^[ ]*$/ ba
      };
    
      ## Skip all lines until previous condition be true.
      b;
    
      ## Label "a".
      :a;
    
      ## Save all content from next entry until end of file.
      $! { 
        N; 
        ba 
      }; 
    
      ## Remove extra newline and print.
      s/^\n//; 
      p
    
    ' infile  
    

    EDIT 将上一条命令添加为一行:

    sed -n '/time:[ ]*20130309235926/,$ { /^[ ]*$/ ba }; b; :a; $! { N; ba }; s/^\n//; p' infile
    

    【讨论】:

    • 这包括第一条记录。也许您可以进行后期处理以删除该记录。
    • @paddy:你是对的。我没有意识到这一点。我会努力解决的。
    • 其实我不想要第一条记录,无论如何要这样做?
    • @user2162950:编辑版本跳过第一条记录。以何种方式没有按您的预期工作?
    • 我收到以下错误:sed: $! { 不是公认的函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2021-01-14
    • 2013-03-12
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    相关资源
    最近更新 更多