linux + IPアドレスを3オクテットまたは4オ​​クテットと一致させます。

linux + IPアドレスを3オクテットまたは4オ​​クテットと一致させます。

1つのコマンドでIPアドレスを4オクテットまたは3オクテットに一致させるにはどうすればよいですか?

ターゲット - xxx.xxx.xxxまたはxxx.xxx.xxx.xxxと一致する(構文はLinuxおよびSolarisに適している必要があります)

次のコマンドを1つにまとめるにはどうすればよいですか?

 echo $IP_ADDRESS  | grep  '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
 echo $IP_ADDRESS  | grep  '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 

私もこれを試しましたが(できませんでした)

        echo $IP_ADDRESS | egrep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}|[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

ベストアンサー1

 if expr ".$IP_ADDRESS" : '\(\.[0-9]\{1,3\}\)\{3,4\}$' > /dev/null 
 then echo match
 else echo no match
 fi

文字列以外の行を一致させるために使用されるため、grepここでは使用できません。パラメータを置き換えるため、これらはgrep使用できません。echoまた、変数を引用符で囲まないままにすることはできません。それ以外の場合、ファイル名の生成とトークン化が発生します。

そのパターンに一致する入力ファイルの行を見つけるには、grep次のように使用する必要があります。

 grep -Ex '[0-9]{1,3}(\.[0-9]{1.3}){2,3}' < input.file

-x全体が 10 進 3 桁または 4 桁から最大 3 桁(オプション)で構成されるすべての行が報告されます。

テキストファイルから3つまたは4つのIPアドレスを最大3桁まで抽出したい場合は、次の方法を使用することをお勧めしますperl

perl -lne 'print for grep /^\d{1,3}(\.\d{1,3}){2,3}$/, /[\d.]+/g'

出力されます:

111.222.333
1.2.3.4

次の入力の場合:

foo 1.1234.2.3 1.2 1.2.3.4.5 111.222.333 bar1.2.3.4@

次のようにすることもできます。

tr -cs 0-9. '[\n*]' < input.file |
  grep -Ex '[0-9]{1,3}(\.[0-9]{1.3}){2,3}'

おすすめ記事