控制台中的文本操作



我有一个文本文件,看起来像这样:

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,这让我发疯。有什么线索吗?

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

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

输出:

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

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

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)
sed 's/[^]]*.(.*)[.*/1/' file

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

最新更新