私は正規表現を学んでいて、練習でIPアドレスをgrep'ingしようとしましたが、結果はありません。 VSCodeで試してみましたがうまくいきました。誰でも私がどこに間違っているのか教えてもらえますか?
echo 192.168.1.1 | grep -e '\d+\.\d+\.\d+\.\d+'
答え1
使用grep -P
:
-P, --perl-regexp PATTERNS are Perl regular expressions
答え2
正規表現は、実際にはIPv4アドレスなどのエントリを解析するためには使用されません。特定のレベルの精度を達成するために、次のことを試すことができます。
数値自体を一致させる場合、式は点\d+\.\d+\.\d+\.\d+
で区切られた4つの数値セットと一致します。\d
正規表現を覚えてくださいたくさんあります味使用されるエンジンによって結果が異なる場合があります。他の回答で提案されているように使用すると、grep -P
解析エンジンが変更されます。
存在するIPv4アドレス一致 - O'Reilly's正規表現マニュアルいくつかの例があります。
これはIPアドレスのみを検証しますが、299.299.111.1
多くの確認には合格しません。
^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
ページの他の例では、検出範囲を有効なIPアドレスに絞り込み、長いテキストから正確に抽出するための提案を見ると、IPv4アドレスが正規表現に適していない理由がわかります。
\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}↵
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b