在unix中通过sed命令获取错误

在unix中通过sed命令获取错误,unix,sed,Unix,Sed,我必须替换所有xml文件中的以下值,以便 tcp://pondevpms1.fm.rbsgrp.net:6033,pondevpms2.fm.rbsgrp.net:6033 需要替换的值如下所示 tcp://pondevpms1:3063 因此,我在包含所有xml的目录中启动了下面的命令 sed -i 's/tcp://pondevpms1.fm.rbsgrp.net:6033,pondevpms2.fm.rbsgrp.net:6033/tcp://pondevpms1:6063 /g' *

我必须替换所有xml文件中的以下值,以便

tcp://pondevpms1.fm.rbsgrp.net:6033,pondevpms2.fm.rbsgrp.net:6033
需要替换的值如下所示

tcp://pondevpms1:3063
因此,我在包含所有xml的目录中启动了下面的命令

sed -i 's/tcp://pondevpms1.fm.rbsgrp.net:6033,pondevpms2.fm.rbsgrp.net:6033/tcp://pondevpms1:6063 /g' *.xml
但我在下面得到了这个错误,请告诉我遗漏了什么

下面是我现在得到的错误

sed: -e expression #1, char 9: unknown option to `s'

我想你应该把你的分隔符从/改成其他类似的东西# 所以你的命令是这样的

sed -i 's#tcp://pondevpms1.fm.rbsgrp.net:6033,pondevpms2.fm.rbsgrp.net:6033#tcp://pondevpms1:6063#g' *.xml

或者,您可以跳过所有的斜杠,但这看起来不太好

您忘记添加错误,但我敢打赌,您的文本中的斜杠会给您带来麻烦。由于您将
/
用作sed运算符,因此需要在文本中转义它:
\/
用于每个
/

但是,由于您的文本有很多斜杠,sed可以使用其他字符作为操作符,因此我只使用管道作为sed操作符

sed -i 's|tcp://pondevpms1.fm.rbsgrp.net:6033,pondevpms2.fm.rbsgrp.net:6033|tcp://pondevpms1:6063 |g' *.xml

你的表达不正确。您可以使用任何分隔符,因此避免使用“/”,因为它与内容冲突,我个人使用#,因为除了在注释中,它很少使用

sed -i 's#tcp://pondevpms1.fm.rbsgrp.net:6033,pondevpms2.fm.rbsgrp.net:6033#tcp://pondevpms1:6063#g' *.xml

我得到的错误是sed:-e expression#1,char 9:unknown option to`s'错误是sed:-e expression#1,char 9:unknown option to`s'好的,那么这应该可以解决您的问题“sed不在‘适当’的位置工作”??。什么意思?这就是
-i
标志的作用。我说我生锈了。现在这真的被证实了:)编辑我的答案!