Unix 使用Sed中的变量替换文本无效

Unix 使用Sed中的变量替换文本无效,unix,sed,Unix,Sed,我需要使用Sed修改一个xml文件来替换该行 url="jdbc:oracle:thin:@//ttpdbscan.axel.net:1521/axel.telco.net" 与 我已经存储了这样的行 ACTUAL_DB=$(sed -n 's#^.*url="\(.*\).*"#\1#p' $FILE.xml) ACTUAL_DB= "jdbc:oracle:thin:@//ttpdbscan.axel.net:1521/axel.telco.net " 及 替换的方法是这个 sed -

我需要使用Sed修改一个xml文件来替换该行

url="jdbc:oracle:thin:@//ttpdbscan.axel.net:1521/axel.telco.net"

我已经存储了这样的行

ACTUAL_DB=$(sed -n 's#^.*url="\(.*\).*"#\1#p' $FILE.xml)
ACTUAL_DB= "jdbc:oracle:thin:@//ttpdbscan.axel.net:1521/axel.telco.net "

替换的方法是这个

sed -i "s#$ACTUAL_DB#$NEW_DB#g" $File.xml
问题是,当我运行脚本时,文件保持不变


我已经回显了变量,所有变量都返回了正确的值。

假设您拥有的文件是
file.xml
(如果不是变量),您可以使用

sed -i "s#${ACTUAL_DB}#${NEW_DB}#g" File.xml
请尝试使用其他分隔符:

sed -i "s~${ACTUAL_DB}~${NEW_DB}~g" File.xml
如果您的
sed
不支持
-i
使用

sed "s~${ACTUAL_DB}~${NEW_DB}~g" File.xml 1<> File.xml
sed“s~${ACTUAL_DB}~${NEW_DB}~g”File.xml 1 File.xml

请参见

假设您拥有的文件是
file.xml
(如果不是变量),您可以使用

sed -i "s#${ACTUAL_DB}#${NEW_DB}#g" File.xml
请尝试使用其他分隔符:

sed -i "s~${ACTUAL_DB}~${NEW_DB}~g" File.xml
如果您的
sed
不支持
-i
使用

sed "s~${ACTUAL_DB}~${NEW_DB}~g" File.xml 1<> File.xml
sed“s~${ACTUAL_DB}~${NEW_DB}~g”File.xml 1 File.xml

请参见

,因此我将输出保存到另一个文件中,并发现字符串有额外的空间

看起来是这样的

ACTUAL_DB=$(sed -n 's#^.*url="\(.*\).*"#\1#p' $FILE.xml)
ACTUAL_DB= "jdbc:oracle:thin:@//ttpdbscan.axel.net:1521/axel.telco.net "
我用鼠标移走了多余的空间

"$(echo -e "${ACTUAL_DB}" | tr -d '[:space:]')"

现在sed按预期工作

,因此我将输出保存到另一个文件中,并发现字符串有额外的空间

看起来是这样的

ACTUAL_DB=$(sed -n 's#^.*url="\(.*\).*"#\1#p' $FILE.xml)
ACTUAL_DB= "jdbc:oracle:thin:@//ttpdbscan.axel.net:1521/axel.telco.net "
我用鼠标移走了多余的空间

"$(echo -e "${ACTUAL_DB}" | tr -d '[:space:]')"

现在sed正在按预期工作

尽管使用
sed
修改xml是不可取的(请改用xmlstarlet之类的工具),但我看不到给定的示例和使用的sed命令有任何问题。如果使用
sed“s#$ACTUAL_DB#$NEW#DB#g”会发生什么$File.xml>new.xml
新文件是否修改了内容?能否添加
echo${ACTUAL_DB}
sed-i's#${ACTUAL_DB}{new#DB}{g”File.xml的输出?如果
File.xml
是一个路径,则不应在那里添加
$
。当我回显实际的\u DB时,它会显示正确的值。我做了一个测试,在那里我创建了另一个变量并分配了sed与新变量一起工作的硬编码文本,如果我将它与我得到的变量进行比较,就会发现它们是相同的,尽管使用
sed
修改xml是不可取的(请改用xmlstarlet之类的工具),我看不出给定的示例和使用的sed命令有任何问题..如果您执行
sed“s#react#u DB#NEW#DB#g”$File.xml>NEW.xml
新文件是否修改了内容?能否添加
echo${react#u DB}
sed-I“s#DB}{react#g”File.xml>的输出?如果
File.xml
是一个路径,则不应在那里添加
$
。当我回显实际的\u DB时,它会显示正确的值。我做了一个测试,在那里我创建了另一个变量并分配了硬编码文本,sed与这个新变量一起工作,如果我将它与我得到的变量进行比较,就会发现它们是相同的