Это что-то вроде продолжения из Как использовать sed для замены только первого вхождения в файле? , но с более целенаправленным запросом.Для данного файла
Peach: data/file1.txt
Apple: data/file2.txt
Pear: data/file3.txt
Apple: data/file4.txt
Цель состоит в том, чтобы заменить только первую строку, содержащую Apple, новой строкой, содержащей фиксированную строку (Banana), за которой следует переменная bash.В новом выводе строка 2 теперь выглядит следующим образом:
Banana: newdata/data.txt
Вот самая последняя попытка ...
BananaVariable=newdata
sed -i -E "0,|(Apple).*|{s|(Apple:).*|Banana: "$BananaVariable"/data.txt|}" filename
Однако это приводит к ошибке:
sed: -e expression #1, char 3: unexpected `,'
Я думаю, мне нужны двойные кавычки вокруг $ BananaVariable, чтобы он мог сбежать, чтобы он мог вставить фактическую строку вместо «BananaVariable», но я думаю, что эти двойные кавычки вызывают проблему.(ОС CentOS 7, sed - версия GNU)