Bash 在替换命令中获取坏标志'/';用于sed替换

Bash 在替换命令中获取坏标志'/';用于sed替换,bash,sed,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

在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: '/'

您将需要使用另一个分隔符。并转义
$
或使用单引号:

% ip="http://127.1.1.2:3000"
% sed 's~DOMAIN_LOCAL = .*$~DOMAIN_LOCAL = "'"$ip"'";~' a.txt
DOMAIN_LOCAL = http://127.1.1.2:3000;
s
substitute命令中将
/
用作分隔符时,它将在
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

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

使用#替换/来避免此问题
$sed的#find#replace#文件

我希望它带有双引号,比如
DOMAIN\u LOCAL=”http://127.1.1.2:3000";
基本上,每当我使用
'/'
作为分隔符时,它会在找到正斜杠后立即停止替换。是否正确?@DisplayName是的,需要注意的是变量
$ip
在调用sed命令之前已展开。因此sed不知道http://中的斜杠是文字斜杠,而不是分隔符;我发现这个例子很有用。。。所有“/”都必须替换。。。在链接示例中,是“?”