通过unix

时间:2016-06-27 14:01:52

标签: 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

但我收到以下错误请告知缺少什么..?

低于我现在获得仪式的错误

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

3 个答案:

答案 0 :(得分:1)

我认为你应该将你的分隔符从/更改为其他类似的# 所以你的命令看起来像这样

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

或者,你可以逃脱所有斜线,但这看起来不太好

答案 1 :(得分:1)

你忘了添加错误,但我敢打赌你文本中的斜杠会给你带来麻烦。由于您使用/作为sed运算符,因此需要在文本中对其进行转义:\//

但是,由于你的文本有很多斜杠而且sed可以使用其他字符作为运算符,我只想用一个管道作为sed运算符;

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

答案 2 :(得分:1)

你的表情不正确。您可以使用任何分隔符,因此请避免使用'/',因为它与内容冲突,我个人使用#,因为除了评论之外很少使用它。

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