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