我想用新字符串替换旧字符串。这是我使用的
sed -i "0,|$old|{s|$old|$new|g}" file
但它给了我错误:
sed: -e expression #1, char 3: unexpected `,'
如何改变它?
还
如何仅更改最后一次出现的事件?
例子
Apple / Banana / Apple / orange / Apple
|
|
\-/
Apple / Banana / Apple / orange / Melon
答案1
除了替代(s
)命令之外,你需要在替代分隔符前面加上反斜杠,即,要|
在你的范围内用作正则表达式分隔符,它必须是0,\|$old|
所以
sed -i "0,\|$old|{s|$old|$new|g}" file
应该可以工作(尽管替代表达式周围的括号是不必要的,因为它是一个单一表达式)。
请注意,包含g
(全局)标志将导致 sed 替换全部在$old
第一的匹配行:
$ echo -e "old and bold\nolder and bolder\noldest and boldest" | sed "0,\|old| s|old|new|g"
new and bnew
older and bolder
oldest and boldest
如果你只想替换第一个实例,请删除g
ie
$ echo -e "old and bold\nolder and bolder\noldest and boldest" | sed "0,\|old| s|old|new|"
new and bold
older and bolder
oldest and boldest
答案2
这应该对你有用:
sed -i "0,/${old}/s,${old},${new}," file