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}'