Я пытаюсь реализовать sed replace с переменными оболочки. Насколько сейчас я рабочий СЭД заменить '
Sed заменить на переменные оболочки
sed -i -r 's#(export\ PATH=")(.*)#\1/home/USER/bin:~/.local/bin:\2#' ~/.zshrc
'
Но, к сожалению, не расширять переменные оболочки так же, как указано в этом ответе https://stackoverflow.com/a/5156322/675100
При попытке использовать "
я получаю проблемы со скобками и т.д. Я хотел бы сделать это родовое всегда использовать whoami
вместо USER
Первая попытка будет
sed -i -r "s#\(export\ PATH=\"\)(.*)#\1/home/`whoami`/bin:~/.local/bin:\2#" ~/.zshrc
sed: -e expression #1, char 60: invalid reference \2 on `s' command's RHS
EDIT
Я попытался
sed -i -r "s#\(export\ PATH=\"\)\(.*\)#\1/home/$(whoami)/bin:~/.local/bin:\2#" ~/.zshrc
, чтобы избежать второй группы, но я получаю подобную ошибку:
sed: -e expression #1, char 63: invalid reference \2 on `s' command's RHS
Обратите внимания, что только' $ ' и back-ticks вызывают проблемы внутри двойных кавычек; круглые скобки применимы только в том случае, когда предшествует '$' как в '$ (whoami)' и т. д. –
Вы избежали первой пары круглых скобок, но не вторую пару вокруг '(. *)'. Вот почему нет второй группы, на которую можно ссылаться с '\ 2'. Кроме того, что такое '-r'? Моя копия 'sed' не имеет этого ... – svckr
Почему вы специально используете'/home/USER/bin' вместо '~/bin'? –