非常に長いテキストファイルがあります(ここ)には6つの16進文字を含める必要があり、「break」(1文字で表示され、以下のコードマークダウンでは正しく表示されないようです)といくつかの単語を含める必要があります。
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
/を使用して、このテキストファイルの "break"の後に6つの16進文字で始まらないすべての行を削除するにはどうすればよいですかsed
?awk
perl
000000
PSボーナスポイントを取得するには、FFFFFF
16進文字(例:->)に基づいてアルファベット順と数字順にファイルを並べ替える最良の方法は何ですか?ただ使用する必要がありますか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
これは、最初のフィールドに正確に6つの16進数を含む行を抽出するために使用されます。パターン[[:xdigit:]]
は16進数と一致し、{6}
6つが必要です。フィールドの始まりと終わりをそれぞれ使用して固定するだけで、必要な^
行$
だけが一致します。
新しい名前で保存するには、ファイルにリダイレクトします。
awk
これはGNU(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
この式では、\>
16進数の終わりと一致します。これは次のことを保証します。もっと長く数値が一致しません。この\>
パターンは次のように一致します。単語の境界、単語文字と単語以外の文字の間の幅がゼロの空白。
結果データをソートするには、 trough を介して結果をパイプするか、sort
16sort -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つの16進数と空白ではなく空白境界(\b
)を検索します。