0

我正在两台服务器之间迁移一些数据。数据保存在每台服务器上的相同文件夹结构中。

移动数据后,我想在所有受影响的 Linux 机器上更新 fstab 文件。我有一个 bash 脚本,它在服务器之间同步数据,然后登录到列表中的每台机器,并使用 sed 用新的 IP 地址更新 fstab。

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

这在过去工作得非常好,但是这次我正在迁移一个名称与其他几个非常相似的文件夹,假设 $share 是“home”:

home
home-old
home-ancient

我遇到的问题是这个正则表达式正在使用 $share 中包含的文本获取所有共享,而不仅仅是我想要的。

有没有办法调整正则表达式,以便它只替换我想要的单行上的 IP?我查看了 /b 变量,但似乎无法让它工作,不幸的是正则表达式通常让我感到困惑!

4

1 回答 1

1

\b是 GNU 扩展,在这种情况下不起作用,因为它匹配单词边界,并且空格和-都在非单词组中。它将匹配所有这些。一个简单的选择是在 之后匹配空格(或行尾)字符$share,例如:

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