次の文字列があるとしましょう。
sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret
「192.168.1.1」または他の有効なIPアドレス(それぞれ0から255までの点で区切られた4つの10進数、例えば172.16.254.1)を抽出したいと思います。
最も簡単な方法は、文字列 "-ip"の間と次のスペース(192.168.1.1とsdfdfの間のスペース)の間のすべてのエントリを一致させるようです。
私は試した:
sed -e 's/-s \(.*\)[[:space:]]/\1/'
しかし役に立たない
答え1
現在、あなたの質問は「文字列 '-ip'から次のスペースに抽出する方法」です。次のコマンドはこの質問に答えます。
sed -e 's/^.*-ip \([^ ]*\) .*$/\1/'
仕組みは基本的に「空白以外の文字数」です。[^ ]*
$ echo "sdf sfdi -ip 192.168.1.1 sdf eret" | sed -e 's/^.*-ip \([^ ]*\) .*$/\1/'
192.168.1.1
答え2
GNUを仮定するとgrep
:
$ echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE '[0-9.]+'
192.168.1.1
有効なIPアドレスのみに制限して、文字列を4つの数字のセットに分けます。どちらも255を超えません(最初は一致するものがないため.
処理しません)。<0
-
$ echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE '[0-9.]+' |
awk -F. '{for(i=1;i<=NF;i++){if(NF!=4||$i>255){next}}}1;'
192.168.1.1
答え3
GNU grepを使用してください:
echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
出力:
192.168.1.1
答え4
忘れるsed
。可能なIP(v4)アドレスを抽出する方法は次のとおりです。
egrep -o '\b([0-9][0-9]?[0-9]?\.){3}[0-9][0-9]?[0-9]?\b'
絶対に有効なIPアドレス(255より大きい数値なし)を取得するには、上記のコマンドをパイプします。
egrep -v '([3-9][0-9][0-9]|2[6-9][0-9]|25[6-9])'