0

2 つのサーバー間で一部のデータを移行中です。データは、各サーバーの同じフォルダー構造に保持されます。

データを移動したら、影響を受けるすべての Linux マシンで fstab ファイルを更新したいと考えています。サーバー間でデータを再同期し、リスト内の各マシンにログオンして、sed を使用して新しい IP アドレスで fstab を更新する bash スクリプトがあります。

sed "s/\(172.16.0.30\)\(.*\)\(${share}\)\(.*\)/172.16.0.35\2\3\4/"

これは過去にまったく問題なく機能していましたが、今回は、他のいくつかのフォルダーと非常によく似た名前のフォルダーを移行しています。$share が「ホーム」であるとしましょう。

home
home-old
home-ancient

私が抱えている問題は、この正規表現が、必要な共有だけでなく、 $share に含まれるテキストを含むすべての共有を取得していることです。

正規表現を調整して、必要な単一行の IP のみを置き換える方法はありますか? /b 変数を調べましたが、うまく動作しないようです。残念ながら、通常、正規表現は私を混乱させます。

4

1 に答える 1

1

\bは GNU 拡張機能であり、この場合は単語境界に一致し、スペースとスペースの両方が-単語以外のグループにあるため、機能しません。それらすべてに一致します。$share簡単なオプションの 1 つは、次のように の後にスペース (または行末) 文字を一致させることです。

sed "s/\(172.16.0.30\)\(.*\)\(${share}\)\( \(.*\)\|$\)/172.16.0.35\2\3\4/"
于 2012-12-10T15:54:03.140 に答える