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