Sed更改文件中的derby jdbc连接

Sed更改文件中的derby jdbc连接,sed,Sed,这应该很直截了当,但它让我发疯。 我需要更改文件中的derby db连接,我只想更改其连接的主机名 jdbc:derby://myhostname.com:1527/myContextRoot; 我不确定主机名是什么,所以需要对其进行通配符,其余的 格式将始终相同。因此,只需在//和:1527之间更改文本 您可能想要这样的东西: sed s_//.*:1527_//\*:1527_g test.txt 使用u分隔符以避免弄乱/s。匹配//和:1527(含)之间的字符,然后用这些相同的字符和文

这应该很直截了当,但它让我发疯。 我需要更改文件中的derby db连接,我只想更改其连接的主机名

jdbc:derby://myhostname.com:1527/myContextRoot;
我不确定主机名是什么,所以需要对其进行通配符,其余的
格式将始终相同。因此,只需在//和:1527之间更改文本

您可能想要这样的东西:

sed s_//.*:1527_//\*:1527_g test.txt

使用u分隔符以避免弄乱/s。匹配//和:1527(含)之间的字符,然后用这些相同的字符和文本替换*

我能想到的最短解决方案是:

sed -e 's=//[^:]*=//*=' ...

与Mica的回答一样,这使用了一个备用分隔符,并假设主机名以第一个冒号结尾。这将使您的端口保留在原来的位置,而不是与之匹配并将其替换为自身。

实际上,完整的线路将是connect'jdbc:derby://myhostname.com:1527/myContextRoot;';您不需要转义该行中的第二个星号,因为它位于替换字符串中,而不是要匹配的regexp的一部分。谢谢!我已经计算出sed s/jdbc:derby:\/\/.*1527/jdbc:derby:\/\/$NEWHOST:1527/