【问题标题】:Text manipulation in console控制台中的文本操作
【发布时间】:2017-06-21 16:44:49
【问题描述】:

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

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

一件重要的事情:服务器名称有时可以有空格。 我已经尝试了几个小时 sed、awk、grep、cut,这让我发疯。有什么线索吗?

【问题讨论】:

  • 你自己尝试了什么?
  • 您的内部文本本身是否包含诸如2017-02-28 18:58:00 (UTC) ServerName 3: PROBLEM [9865994] [30393](High|Ack: No) 之类的字符串?

标签: bash awk sed


【解决方案1】:

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

awk -F'[][]' '{ print $3 }' file

输出:

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

  • -F'[][]' - 考虑 [] 作为字段分隔符

【讨论】:

  • 如果您的文本中有[] 怎么办?
  • @Tom,请阅读我的第一句话:for static input format。如果 OP 会说“是的,它可能包含那个” - 我会进行更新
  • 非常感谢您的快速回答和解释,效果很好!正是我需要的。
【解决方案2】:

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

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

输入

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)
2017-02-28 18:58:00 (UTC) ServerName 3: PROBLEM [9865994] 2017-02-28 18:58:00 (UTC) ServerName 3: PROBLEM [9865994] Link is down [30393](High|Ack: No) [30393](High|Ack: No)

输出

 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)

【讨论】:

    【解决方案3】:
    sed 's/[^]]*.\(.*\)\[.*/\1/' file
    

    【讨论】:

      【解决方案4】:

      使用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 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 2014-10-18
        • 2014-05-28
        • 1970-01-01
        相关资源
        最近更新 更多