请告诉我如何将一行中的某些文字替换为其他文字....
示例:
/test/India/Mark/
,/testing/Aus/Markos/legacy
使用sed
命令,我无法执行此操作,因为语法本身使用了/
,例如sed 's/old text/new text/g'
。
怎么做?
答案 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
。我们无法判断这是否重要;我们只有问题中的信息可以使用。