替换shell脚本中文件中的部分文本

时间:2015-02-28 05:43:47

标签: shell

请告诉我如何将一行中的某些文字替换为其他文字....

示例:

  • 要替换的文字 - /test/India/Mark/
  • 新条目 - /testing/Aus/Markos/legacy

使用sed命令,我无法执行此操作,因为语法本身使用了/,例如sed 's/old text/new text/g'

怎么做?

2 个答案:

答案 0 :(得分:2)

这应该有帮助

有些人使用冒号:

sed 's:/test/India/Mark:/testing/Aus/Markos/legacy:' <old >new

其他人使用&#34; |&#34;字符。

sed 's/test/India/Mark|/testing/Aus/Markos/legacy|' <old >new

答案 1 :(得分:0)

原始答案

当问题强调&#39;整行&#39;

时适当

使用其他字符(例如@)来分隔搜索/替换命令,并使用\@指定上下文搜索:

sed -e '\@^/test/India/Mark/$@ s@@/testing/Aus/Markos/legacy@'

命令文本中的空格是可选的,为清晰起见而显示。你可能也可以这样做:

sed -e 's@^/test/India/Mark/$@/testing/Aus/Markos/legacy@'

具有基本相同的效果。主要区别在于上下文搜索允许您将多个操作组合在一起,而不是仅仅进行一次替换,因此它更为通用。

请注意,唯一的要求是@未出现在搜索模式或替换文本中。你可以使用任何角色;有时,控制字符如 Control-A 是有效的。

更新

由于问题已被修改以强调行的一部分而不是整行,因此使用的命令会相应地改变,但基本技术(使用不同的分隔符)保持不变。具体而言,行首和行尾锚不再合适:

sed -e 's@/test/India/Mark/@/testing/Aus/Markos/legacy@'

请注意,这恰好使用了问题中的字符串,但是如果有一些文字,例如&#39; XVIII&#39;在Mark之后的斜杠后,替换为legacyXVIII而不是legacy/XVIII。我们无法判断这是否重要;我们只有问题中的信息可以使用。