Bash 控制台中的文本操作

Bash 控制台中的文本操作,bash,awk,sed,Bash,Awk,Sed,我有一个如下所示的文本文件: 2017-02-28 18:58:00 (UTC) ServerName: PROBLEM [2018994] bla bla bla bleh bli blu blo [30393](High|Ack: No) 2017-02-28 18:58:00 (UTC) Server Name 2: PROBLEM [2018f34] doo ba di ba doo [32393](High|Ack: Yes) 2017-02-28 18:58:00 (UTC) Ser

我有一个如下所示的文本文件:

2017-02-28 18:58:00 (UTC) ServerName: PROBLEM [2018994] bla bla bla bleh bli blu blo [30393](High|Ack: No)
2017-02-28 18:58:00 (UTC) Server Name 2: PROBLEM [2018f34] doo ba di ba doo [32393](High|Ack: Yes)
2017-02-28 18:58:00 (UTC) ServerName 3: PROBLEM [9865994] Link is down [30393](High|Ack: No)
我想筛选此文件,只获取每行的错误消息。 根据我给出的示例,输出将是:

bla bla bla bleh bli blu blo
doo ba di ba doo
Link is down
有一点很重要:服务器名有时可以有空格。 我已经试了好几个小时了,塞德,艾克,格雷普,切,这让我发疯了。有线索吗

awk解决方案(对于静态输入格式):

输出:

 bla bla bla bleh bli blu blo 
 doo ba di ba doo 
 Link is down 

  • -F'[]]'
    -将
    [
    ]
    视为字段分隔符
    • awk解决方案(用于静态输入格式):

      输出:

       bla bla bla bleh bli blu blo 
       doo ba di ba doo 
       Link is down 
      

      • -F'[]]'
        -将
        [
        ]
        视为字段分隔符

      Perl用于动态内容,假设格式始终相同

      perl -lne 'print $& if /]\K.*(?=\[)/' file
      
      输入

      输出

       bla bla bla bleh bli blu blo
       doo ba di ba doo
       Link is down
       2017-02-28 18:58:00 (UTC) ServerName 3: PROBLEM [9865994] Link is down [30393](High|Ack: No)
      

      Perl用于动态内容,假设格式始终相同

      perl -lne 'print $& if /]\K.*(?=\[)/' file
      
      输入

      输出

       bla bla bla bleh bli blu blo
       doo ba di ba doo
       Link is down
       2017-02-28 18:58:00 (UTC) ServerName 3: PROBLEM [9865994] Link is down [30393](High|Ack: No)
      
      使用
      sed

      sed -E 's/^.*\[[[:alnum:]]*\][[:blank:]]*(.*)[[:blank:]]*\[[[:alnum:]]*\].*$/\1/' filename
      bla bla bla bleh bli blu blo 
      doo ba di ba doo 
      Link is down 
      
      使用
      sed

      sed -E 's/^.*\[[[:alnum:]]*\][[:blank:]]*(.*)[[:blank:]]*\[[[:alnum:]]*\].*$/\1/' filename
      bla bla bla bleh bli blu blo 
      doo ba di ba doo 
      Link is down 
      

      您自己尝试了什么?您的内部文本本身是否可以包含
      2017-02-28 18:58:00(UTC)ServerName 3:PROBLEM[9865994]
      [30393](High | Ack:No)
      ?您自己尝试了什么?您的内部文本本身是否可以包含
      2017-02-28 18:58:00(UTC)ServerName 3:PROBLEM[9865994]之类的字符串
      [30393](High | Ack:No)
      ?如果您的文本中有
      [
      ]
      呢?@Tom,请阅读我的第一句话:静态输入格式。如果OP会说“是的,它可能包含那个”-我会为快速的回答和解释做很多更新,它工作得很好!正是我所需要的。如果你的文本中有
      [
      ]
      呢?@Tom,读我的第一句话:静态输入格式。如果OP会说“是的,它可能包含那个”-我会为快速的回答和解释做很多更新,它工作得很好!正是我需要的。