这可能是一件非常简单的事情,但我在过去的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
答案 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
。