我有一个很长的文本文件(来自这里)应包含 6 个十六进制字符,然后是一个“break”(它显示为一个字符,并且在下面的代码 markdown 中似乎没有正确显示),后跟几个单词:
00107B Cisco Systems, Inc
00906D Cisco Systems, Inc
0090BF Cisco Systems, Inc
5080 Cisco Systems, Inc
0E+00 ASUSTek COMPUTER INC.
000C6E ASUSTek COMPUTER INC.
001BFC ASUSTek COMPUTER INC.
001E8C ASUSTek COMPUTER INC.
0015F2 ASUSTek COMPUTER INC.
2354 ASUSTek COMPUTER INC.
001FC6 ASUSTek COMPUTER INC.
60182E ShenZhen Protruly Electronic Ltd co.
F4CFE2 Cisco Systems, Inc
501CBF Cisco Systems, Inc
我环顾四周,看不到在这种情况下可行的东西。我的问题是,如何使用grep
///删除此文本文件中不以 6 个十六进制字符开头然后是“break”的所有行sed
?awk
perl
000000
PS 对于奖励积分,根据十六进制字符(即-> FFFFFF
)按字母顺序和数字顺序对文件进行排序的最佳方法是什么?我应该只使用吗sort
?
答案1
$ awk '$1 ~ /^[[:xdigit:]]{6}$/' file
00107B Cisco Systems, Inc
00906D Cisco Systems, Inc
0090BF Cisco Systems, Inc
000C6E ASUSTek COMPUTER INC.
001BFC ASUSTek COMPUTER INC.
001E8C ASUSTek COMPUTER INC.
0015F2 ASUSTek COMPUTER INC.
001FC6 ASUSTek COMPUTER INC.
60182E ShenZhen Protruly Electronic Ltd co.
F4CFE2 Cisco Systems, Inc
501CBF Cisco Systems, Inc
这用于awk
提取第一个字段中恰好包含六个十六进制数字的行。该[[:xdigit:]]
模式匹配一个十六进制数字,并且{6}
需要六个。与分别使用 和 锚定到字段的开头和结尾一起^
,$
这将仅匹配所需的行。
重定向到某个文件以将其保存在新名称下。
请注意,这似乎适用于 GNU awk
(常见于 Linux),但不适用于awk
OpenBSD 或mawk
.
类似的方法sed
:
$ sed -n '/^[[:xdigit:]]\{6\}\>/p' file
00107B Cisco Systems, Inc
00906D Cisco Systems, Inc
0090BF Cisco Systems, Inc
000C6E ASUSTek COMPUTER INC.
001BFC ASUSTek COMPUTER INC.
001E8C ASUSTek COMPUTER INC.
0015F2 ASUSTek COMPUTER INC.
001FC6 ASUSTek COMPUTER INC.
60182E ShenZhen Protruly Electronic Ltd co.
F4CFE2 Cisco Systems, Inc
501CBF Cisco Systems, Inc
在此表达式中,\>
用于匹配十六进制数的末尾。这确保了更长数字不匹配。该\>
模式匹配一个字边界,即单词字符和非单词字符之间的零宽度空格。
要对结果数据进行排序,只需通过管道传输结果 trough sort
,或者sort -f
如果您的十六进制数字同时使用大写和小写字母
答案2
为了完整起见,您也可以使用 grep 执行此操作:
$ grep -E '^[[:xdigit:]]{6}\b' oui.txt
00107B Cisco Systems, Inc
00906D Cisco Systems, Inc
0090BF Cisco Systems, Inc
000C6E ASUSTek COMPUTER INC.
001BFC ASUSTek COMPUTER INC.
001E8C ASUSTek COMPUTER INC.
0015F2 ASUSTek COMPUTER INC.
001FC6 ASUSTek COMPUTER INC.
60182E ShenZhen Protruly Electronic Ltd co.
F4CFE2 Cisco Systems, Inc
501CBF Cisco Systems, Inc
$
此扩展 grep 表达式在每行开头精确搜索 6 个十六进制数字,后跟非空白到空白边界 ( \b
)。