【发布时间】:2017-04-23 02:54:16
【问题描述】:
我绝对可以被视为 sed/awk 新手。我一直在努力做一个多步过滤器,但没有成功。每个部分单独运行时都会产生结果,但是当我将它们链接在一起时,我什么也得不到。我试过 sed|awk、awk|sed、sed|sed、awk|awk。他们都失败了,所以我假设这是除了我以外的所有人都知道的事情。
数据是多行文本块,其中每个块都可以视为一条记录(因此使用“>”分隔符)。在我们过滤到 ADV_NONCONN 块之后,我想将文本块过滤到仅包含“bdaddr”或“RSSI”的行。据我所知,我需要通过管道进入一个单独的操作来执行此操作。
sudo hcidump | awk 'BEGIN {RS=">"} /ADV_NONCONN/' | sed -n -e "/bdaddr/p" -e "/RSSI/p" > log.txt
hcidump 输出样本(一个“记录”):
HCI Event: LE Meta Event (0x3e) plen 43
LE Advertising Report
ADV_NONCONN_IND - Non connectable undirected advertising (3)
bdaddr 0C:F3:EE:0D:70:89 (Public)
Flags: 0x06
Unknown type 0xff with 26 bytes data
RSSI: -62
运行逆向(首先是 sed 部分,然后是 awk)会给出相同的空集结果。我错过了什么简单的事情?
【问题讨论】:
-
几乎没有必要将
awk传递给sed,因为awk可以做sed可以做的大部分事情,而且awk语法通常更容易理解。 -
请允许我给您一些反馈:您的问题和您自己的回答都非常健谈,以至于分心 - 请考虑让它们更简洁和集中。
-
另外,给新手的一些标准建议:如果一个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,也可以选择投票(需要投票)至少 15 个声望点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请参阅the relevant help-center article。如果您的问题尚未完全得到解答,请提供反馈。如果您认为自己找到了最佳解决方案,请将其发布为答案并自我接受。