sedを介して複数の値を置き換える正規表現パターン

sedを介して複数の値を置き換える正規表現パターン

ローカルホストのIPアドレスを解析し、2番目のオクテットを別の値に置き換える必要があるスクリプトがあり、置き換えられた値は現在の値によって異なります。

たとえば、IPが次のような場合10.10.100.6そして、私が必要とする結果は次のとおりです。10.20.100.6、IPが以下の場合10.20.100.6そして、私が必要とする結果は次のとおりです。10.10.100.6

私は以下を試しました:

nmcli con show eno16777984 | grep -E '^ipv4.address' | awk -F"/|[[:space:]]+" '{print $2}' | sed -e 's/^10\.10\./10.20./; s/^10\.20\./10\.10\./'

私が経験している問題は、sedコマンドで設定された順序で置換が発生することです。だから結果は常に10.10....

現在の値がパターンと一致する場合にのみsedに値を変更させる方法はありますか?

ありがとうございます!

ポリスチレンこのコード行は複数の場所で置き換えられて実行され、これを実行する人は限られた経験/知識を持っているため、文書からコピーして貼り付ける必要があるため、短い1行のコードでなければなりません。

修正する

私はついに次のようにこれを行う方法を見つけましたawk

nmcli con show eno16777984 | grep -E '^ipv4.address' | awk -F"/|[[:space:]]+" '{print $2}' | awk -F. '{print $1"."($2 == "10" ? "20" : "10")"."$3"."$4}'

しかし、以下にこれを行う方法を示す素晴らしく簡単な答えがありますsed

ベストアンサー1

ただ追加してくださいt;

sed -e 's/^10\.10\./10.20./;t;s/^10\.20\./10\.10\./'

成功すると最後まで分岐します。しかし、実際には、これらのすべてのgrep、awk、sedを1つのawkにまとめる必要があります。

おすすめ記事