grep
IPv4およびIPv6アドレスを含む任意のファイルからIPv4およびIPv6アドレスをフィルタリングする正規表現を探しています。 IPv4アドレスは次のように機能したいと思います。
grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
ここにいくつかの同様の質問と回答があることを知っていますが、ほとんどはIPv4アドレスと私が見つけた最高の答え私には効果がありません。この式を使用すると、どのIPアドレスも出力されませんgrep
。
質問が明確ではないので、結合された正規表現を探しています。有効なIPアドレスが出力されます。ボーナスとして1行に複数個入れることもできます。
何らかの理由でこれが簡単でない場合はgrep
、私は単純でBSDシステムで作業し、GNUツールが必要ない限り、代替を開こうとします。
ベストアンサー1
代替非grep
ベースperl
方式の使用正規表現::共通パッケージ(FreeBSDポート名で提供p5-Regexp-Common
):
perl -MRegexp::Common=net -nE 'say $& while /$RE{net}{IPv4}|$RE{net}{IPv6}/g' input.txt
例:
$ cat input.txt
some words
a line with 127.0.0.1 and 192.168.1.1 in it.
more words
some line with ::1 in it.
$ perl -MRegexp::Common=net -nE 'say $& while /$RE{net}{IPv4}|$RE{net}{IPv6}/g' input.txt
127.0.0.1
192.168.1.1
::1