0

私はそのようなIPアドレスを取得します:

Ip=`ifconfig | grep inet | grep -v -E 'inet6|127.0.0.1' | \
    tr -d [:alpha:] | tr -s [:space:] | cut -d: -f2`

たとえば、次のようなIPがあります:10.1.0.76

Ip 変数を使用して新しい変数を作成し、別の IP を取得したいと考えています。たとえば、新しい変数は次の値を返します。10.1.0.178

最後の番号の変更だけなので、Ip 変数 (10.1.0.) の一部だけを取得して、末尾に別の番号を追加します。

私はsedで試しましたが、「呼び出されたファイルがありません...」などの間違いが常にあります

手伝って頂けますか ?

4

3 に答える 3

2

パラメータ展開を使用できます: それは単純です:${Ip%.*}.178

${Ip%.*}最後のドットとそれが削除された後のすべてのIPです。は.178、その後に追加したいものです。

ここに文脈があります:

# Your original expression
Ip=`ifconfig | grep inet | grep -v -E 'inet6|127.0.0.1' | \
    tr -d [:alpha:] | tr -s [:space:] | cut -d: -f2`

# assign a new variable with the ip with different end octet
newIp=${Ip%.*}.178

# Show new ip
echo "$newIp"
于 2013-03-01T19:02:52.600 に答える
1

さて、xyzw 形式の IP があるとすれば、perl 正規表現を使用できます。

$ echo "120.20.31.78" | perl -pe 's/(.*)\..*/$1\.123/'
120.20.31.123

これにより、最後の数字 (「78」) が「123」に置き換えられます。

したがって、あなたの場合(「Ip」変数が正しく設定されていると仮定)、次のようになります。

Ip=ifconfig | grep inet | grep -v -E 'inet6|127.0.0.1' | tr -d [:alpha:] | tr -s [:space:] | cut -d: -f2 | perl -pe 's/(.*)\..*/$1\.123/'
于 2013-03-01T18:30:18.680 に答える
0

これを見てください、あなたが望むものであることを願っています:

kent$  echo $ip
10.1.0.76

kent$  echo $part
178

kent$  sed -r "s/(.*\.).*/\1$part/" <<< $ip
10.1.0.178

$ip を新しい値で設定するには:

kent$  ip=$(sed -r "s/(.*\.).*/\1$part/" <<< $ip)

kent$  echo $ip
10.1.0.178
于 2013-03-01T18:31:49.533 に答える