ファイルには次のような線スタイルがあります。
1.2.3.4
1.2.3.4a
1.2.3.45
iaa1.2.3.4ad
11.2.3.4a
a1.2.3.4
1.2.3.4>
<1.2.3.4>
<"1.2.3.4">
1.2.3.4 hostname
すべてのIPを交換したい」1.2.3.4「たとえば、別のIPを使用してください」9.8.7.6'、<>と""で囲まれ、ipの前後に文字が続きます。
しかし、いいえこれ11.2.3.4「または」1.2.3.45'
だから数値 1.2.4.6.7.8.9.10 はすべて一致します。
注:「1.2.3.4」は単なる例であり、有効なIPであれば何でも可能です。
別のIPと交換したいですsed
。1.2.3.4
コマンドを作成する方法がわかりませんsed
。
sed "s/oldip/newip/g"
私は正規表現について少し知っていますが、これは私にとってとても難しいようです。
ありがとうございます。
ベストアンサー1
有効なIPが含まれていない行について何をしたいのかを話していないので、単に無視したいとします。それからやるべきことは、行全体が1〜3個の数字で構成される3つのセット([0-9]{1,3}
)と一致することを確認し、次に1〜3個の数字で構成される最後のセットと一致することを確認することです。次の3つの方法があります。
GNU sed
sed -r 's/^([0-9]{1,3}\.){3}[0-9]{1,3}$/5.6.7.8/' file
非GNU sed
sed 's/^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}$/5.6.7.8/' file
パール
perl -pe 's/^(\d{1,3}\.){3}\d{1,3}$/5.6.7.8/' file