在sed搜索/替换字符串中使用/

时间:2015-02-24 21:28:57

标签: bash sed grep

这可能是一件非常简单的事情,但我在过去的3个小时里一直在寻找解决方案。我需要在一个文件(/etc/reliance.env)中插入一个单词(由变量" $ t"定义),然后在另一个单词恰好有一个" /"在里面。 (让我们说" / custom。")

我目前的解决方案是用$ t / custom替换/ custom。问题是,sed似乎不喜欢使用角色" /"。无论如何,我确信这是一个更有效的解决方案。任何见解?提前谢谢!

     if grep "/custom" /etc/reliance.env; then
        sed -i 's/"/custom/"/"$t /custom/"/g' reliance.env

2 个答案:

答案 0 :(得分:2)

您可以在s///命令中使用几乎任何字符作为分隔符。如果你的模式需要斜线或替换,只需使用其他东西。

sed -i "s,/custom,$t &,g" reliance.env

(我在替换中使用&表示“整个匹配”,以避免再次输入。)

如果希望shell扩展$t变量,还需要双引号(而不是单引号)。如果没有,那么单引号就是你想要的。

除非您的文件非常大或者您根本不需要修改它,除非内容在那里首先运行grep可能不是必需的(并且您应该明确告诉grep停止第一个文件与-m 1匹配,因为您关心并使grep -q的输出无声。

答案 1 :(得分:0)

逃避角色:

sed -i "s/\/custom/\$t \custom/g/" reliance.env

编辑:此外,点击文件并不比在其上运行sed快得多,所以只需跳过if grep ...,然后执行sed