Я хочу заменить, и старая строка с новой. Это - то, что я использовал
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
За исключением команды (s
) замены, необходимо снабдить альтернативный разделитель предисловием с обратной косой чертой т.е. использовать |
в качестве regex разделителя в диапазоне, которым это должно быть 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
т.е.
$ 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
Это должно работать на Вас:
sed -i "0,/${old}/s,${old},${new}," file