需要捕获特定输出

时间:2016-02-26 22:41:12

标签: bash awk sed grep

这是我从程序中获得的确切输出:

#Meaningless output
[TABL]
BSSID
4c:e6:78:e3:4e:58
a0:8b:16:e3:3a:42

ADMAC=a1:3c:24:e5:2e:22
ADMAC=.......
#Meaningless output

我只想捕获BSSID列以及它的mac地址而不是ADMAC值或任何其他值。我怎样才能使用bash(或grep或sed或awk,任何东西)?谢谢。

5 个答案:

答案 0 :(得分:2)

awk救援!

$ awk '/BSSID/{p=1} p&&!NF{exit} p' file

BSSID
4c:e6:78:e3:4e:58
a0:8b:16:e3:3a:42

在模式匹配后打印,直到空行。

或者,更简单,但最后会得到空行。

$ awk '/BSSID/,/^$/' file

BSSID
4c:e6:78:e3:4e:58
a0:8b:16:e3:3a:42
<- empty line here ...

过滤最后一个空行,可以添加条件

$ awk '/BSSID/,/^$/{if(NF) print}'

请注意,第一种选择是最灵活的,也是首选的选择。

答案 1 :(得分:0)

试试这个。它使用你的例子在Mac上工作。

cat output.txt | awk '/BSSID/,/ADMAC/'| grep -v ADMAC

答案 2 :(得分:0)

告诉grep在比赛结束后显示两条线并在1场比赛后停止。

grep -m1 -A2 "^BSSID$" output.txt

答案 3 :(得分:0)

sed救援!

由于要求仅包括MAC地址(必须包括冒号,句点或破折号),因此以下示例输入是合理的:

 sed -n '/^BSSID/,/^ *$/ {/[:.-]/p;}'

答案 4 :(得分:-1)

如果你有awk尝试:

    awk '{/BSSID/,/ADMAC/ print}' output.txt