在变量和变量中使用“ /”时,使用sed仅替换首次出现

时间:2019-05-30 21:37:55

标签: bash sed

我有一个看起来像这样的文件

I/am/a/string
I'm/still/a/string
Always/a/string

我正在尝试使用sed将“ string”的首次出现替换为包含“ /”之类的变量

x=ive/been/replaced

所以sed的输出将是

I/am/a/ive/been/replaced

因为我只希望第一次出现,而我使用的变量通常是您使用的

sed -i "0,/string/s//$x/" file  

但是在这种情况下,因为变量具有“ /”,所以我必须使用其他分隔符,例如

sed "0,|string|s||$x|" file

但这不起作用。

我想念什么?

注意:

我想在sed中完成此操作

1 个答案:

答案 0 :(得分:1)

如果使用awk没问题:您可以在第一次更换后打印并退出。

awk -v x="${x}" '{gsub(/string/,x);print ;exit}' file
I/am/a/ive/been/replaced

sed版本:第一次匹配后将退出,请注意,搜索字符串“ string”仍位于/ /内,而替换部分使用不同的分隔符。

sed -n   "0,/string/ s|string|$x|p"   
I/am/a/ive/been/replaced