在替代命令中得到坏旗' /'用于替代sed

时间:2016-05-30 15:36:12

标签: bash sed

我在sed命令中使用replace时遇到一个问题。我有一个名为a.txt的文件,我想用其他一行代替一行,但我收到了上述错误。

代码我要替换:

DOMAIN_LOCAL = "http://127.0.0.1:3000";

我想让它替换为任何其他ip,让我们说下面的内容: -

DOMAIN_LOCAL = "http://127.1.1.2:3000";

我尝试了什么: -

ip=http://127.1.1.2:3000
sed "s/DOMAIN_LOCAL = .*$/DOMAIN_LOCAL = "$ip";/g" a.txt

但它给了我以下错误。有人可以帮忙。

sed: 1: "s/DOMAIN_LOCAL = .*$/DO ...": bad flag in substitute command: '/'

3 个答案:

答案 0 :(得分:7)

您需要使用其他分隔符。并转义$或使用单引号:

% ip="http://127.1.1.2:3000"
% sed 's~DOMAIN_LOCAL = .*$~DOMAIN_LOCAL = "'"$ip"'";~' a.txt
DOMAIN_LOCAL = http://127.1.1.2:3000;

当您在/ ubstitute命令中使用s作为分隔符时,它将在http://的第一个斜杠处终止:

sed 's/DOMAIN_LOCAL = .*$/DOMAIN_LOCAL = http://127.1.1.2:3000;/'
#                                             ^ here

故障:

sed 's~DOMAIN_LOCAL = .*$~DOMAIN_LOCAL = "'"$ip"'";~' a.txt
#   │                                    ││└ Use double quotes to avoid word splitting and
#   │                                    ││  globbing on $ip
#   │                                    │└ Exit single quotes
#   │                                    └ Literal double quotes
#   └ Using single quotes to avoid having to escape special characters

答案 1 :(得分:1)

您可能需要另一个分隔符而不是"/",例如"%"。它对我有用。

答案 2 :(得分:0)

使用#replace / 来避免这个问题 $ sed 's#find#replace#' file