我有此日志文本:

1. SNMPv2-SMI::enterprises.37447.2.1.1.1 type=4  value=STRING: "Test warn level"
2. SNMPv2-SMI::enterprises.37447.2.1.1.2 type=4  value=STRING: "WARN"
3. SNMPv2-SMI::enterprises.37447.2.1.1.3 type=4  value=STRING: "PSBA2STOR051"
4. SNMPv2-SMI::enterprises.37447.2.1.1.4 type=4  value=STRING: "AF-201969"
5. SNMPv2-SMI::enterprises.37447.2.1.1.5 type=4  value=STRING: "PSBA2STOR051"
6. SNMPv2-SMI::enterprises.37447.2.1.1.6 type=4  value=STRING: "117813866"
7. SNMPv2-SMI::enterprises.37447.2.1.1.7 type=4  value=STRING: "test"
8. SNMPv2-SMI::enterprises.37447.2.1.1.8 type=4  value=STRING: "test"


请注意,订单号在我的日志中不存在

我只需要提取

Test warn level
test
test


结果需要是:测试警告级别:test-test

我已经试过了:

(SNMPv2-SMI::enterprises.37447.2.1.1.1.*)\n.*\n.*\n.*\n.*\n.*\n(.*SNMPv2-SMI::enterprises.37447.2.1.1.7.*)\n(.*SNMPv2-SMI::enterprises.37447.2.1.1.8.*)


但是它不能像我需要的那样返回孔线

最佳答案

你可以做:

sed -e 's/.*37447.2.1.1.[178].*"\(.*\)"/\1/;t;d' test.log


正则表达式搜索包含37447.2.1.1.1,.7或.8的行:37447.2.1.1.[178]

在这些行中,仅使用引号之间的内容:"\(.*\)"

不匹配的行(t)被抑制(d):t;d

09-19 03:58