xkeycaps
кажется, делает то, что Вы хотите, если я понимаю Вас правильно.
Попробуйте это (Крис, ты очень близко):
sed -i '' 's|export TODO_FILE="$TODO_DIR/todo.txt"|export TODO_FILE="$TODO_DIR/writing.txt"|g' ~/.todo/config
Лучше сначала сопоставим строку, а затем просто замените часть
sed -i '/export TODO_FILE/ s/todo.txt/writing.txt/' ~/.todo/config
, это становится коротким, когда у вас слишком длинная переменная пути.
И как упомянуто в предыдущем ответе, используйте какой-то другой сепаратор при работе с пути.
Я не думаю, что проблема в долларовом знаке, потому что он внутренних кавычек. Предполагая, что вы используете Bash, Строки внутри одной цитаты не являются переменными расширенными .
Одной из ваших проблем является то, что вы выбрали символ сепаратора (первый символ после команды «S»), который существует в ваших строках находки / замены - «/». Это интерпретируется САД по-разному, чем то, что вы ожидаете. Вы должны выбрать другой символ, который не отображается в ваших строках находки / замены, таких как «|».
sed -i 's|export TODO_FILE="$TODO_DIR/todo.txt"|export TODO_FILE="$TODO_DIR/writing.txt"|g' ~/.todo/config
Однако это не объясняет ваше конкретное сообщение об ошибке.
Может быть, вы используете версию BSD, которая , очевидно, относится к -i по-разному ?