在 sed search/replacement 字符串中使用 /

using / in a sed search/replacement string

这可能是一些愚蠢简单的事情,但过去 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

转义字符:

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

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

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

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

(我在替换中使用了 &,这意味着 "the entire match" 以避免需要再次输入它。)

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

除非你的文件很大,或者你根本不需要修改它,除非内容在那里 运行 grep first 可能是没有必要的(而且你一定要告诉 grep 在与 -m 1 的第一场比赛中停止,因为这是您关心的所有内容,并使用 -q).

使 grep 的输出静音