我有一个文本文件,看起来像这样:
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