$ 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
, например, на Linux. 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
В этом выражении \>
используется для соответствия концу шестнадцатеричного числа. Это гарантирует, что более длинные числа не будут совпадать. Шаблон \>
соответствует границе слова , то есть пробелу нулевой ширины -между символом слова и символом слова, отличным от -.
Для сортировки полученных данных просто передайте результат через sort
или sort -f
, если в ваших шестнадцатеричных числах используются как прописные, так и строчные буквы
Для полноты картины это можно сделать и с помощью 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
).